#angularjs #ng-repeat
#angularjs #angularjs-ng-repeat
Вопрос:
У меня эта проблема на моей веб-странице:
app.controller('MessageController',['$http',function($http){
http.get("DataManage.php?metodo=GetMessage")
.then(function(response){
this.Message=response.data.records;
});
this.ShowMyMessage=function(){
console.log("Message");
}
}])
Json поступает правильно, но если я хочу отобразить эти значения внутри div с помощью ng-repeat, ничего не отображается:
<div class="card-content Blue-text" ng-controller='MessageController'>
<li id="MessageBox" ng-repeat='msg in Message'>
<span>{{msg.Text}}</span></li>
</li>
</div>
Я много раз проверял реализацию, но не могу найти причину, по которой это происходит.
Комментарии:
1. Сообщение не должно быть написано с заглавной буквы по соглашению, и вокруг вашего ‘ =’ должны быть пробелы. * если только это не указано в определении функции для параметров как
(code='good', starter={}) => { body of function }
. Но реальная проблема, с которой вы сталкиваетесь, заключается в том, что вам нужно $scope.messages (обратите внимание на его множественное число, потому что это массив), а не это. Сообщение (это относится к контроллеру, а не к области, используемой в представлении html).
Ответ №1:
Похоже, вы пытались использовать controllerAs
шаблон. В этом случае вам нужно связать все переменные внутри контекста функции контроллера ( this
), что вы уже сделали. Но вы пропустили определение псевдонима контроллера внутри ng-controller
директивы value
, например ng-controller="MessageController as vm"
.
Разметка
<div class="card-content Blue-text" ng-controller="MessageController as vm">
<li id="MessageBox" ng-repeat='msg in vm.Message'>
<span>{{msg.Text}}</span></li>
</li>
</div>
Контроллер
app.controller('MessageController', ['$http', function($http) {
var vm = this; //put this inside vm to avoid this related issue.
$http.get("DataManage.php?metodo=GetMessage")
.then(function(response) {
vm.Message = response.data.records;
}
);
vm.ShowMyMessage = function() {
console.log("Message");
}
}]);
Комментарии:
1. О, это было так просто, я сделал это на каждом контроллере, но не на этом, спасибо!
2. Вы могли бы получить ответ сейчас. Спасибо 😉
Ответ №2:
Измените this.message
на $scope.message
app.controller('MessageController',['$http',function($http,$scope){
$http.get("DataManage.php?metodo=GetMessage")
.then(function(response){
$scope.Message=response.data.records;
});
Ответ №3:
Используйте переменную scope.
app.controller('MessageController',['$http','$scope',function($http,$scope){
$http.get("DataManage.php?metodo=GetMessage")
.then(function(response){
$scope.Message=response.data.records;
});
this.ShowMyMessage=function(){
console.log("Message");
}
}]);