如果我有以下简单的控制器&服务。
<div ng-controller="MessagesCtrl">
<ul>
<li ng-repeat="message in data.messages">
{{ message }}
</li>
</ul>
</div>
myApp.factory('Data', function () {
var _messages = [];
return {
messages: _messages,
getMessages: function() {
$http.get('/messages').then(function(response) {
_messages = response.data;
});
}
};
});
function MessagesCtrl($scope, Data) {
$scope.data = Data;
$scope.data.getMessages();
}
我希望messages
模型在AJAX请求完成并填充对象时自动更新,但事实并非如此。这应该怎么样? (我有点问这个结构的最佳实践是什么。)
编辑 - 工作解决方案:
<div ng-controller="MessagesCtrl">
<ul>
<li ng-repeat="message in data.messages">
{{ message }}
</li>
</ul>
</div>
myApp.factory('Data', function () {
return {
getMessages: function() {
var _this = this;
$http.get('/messages').then(function(response) {
_this.messages = response.data;
});
}
};
});
function MessagesCtrl($scope, Data) {
$scope.data = Data;
$scope.data.getMessages();
}
答案 0 :(得分:3)
我很确定你在这里遇到JavaScript问题而不是与AngularJS相关的问题。让我们删除与AngularJS相关的代码,只留下JavaScript片段:
function factory() {
var _messages = [];
return {
messages: _messages,
getMessages: function() {
_messages = [1, 2, 3, 4];
}
}
}
> var test = factory();
undefined
> test.messages
[]
> test.getMessages()
undefined
> test.messages
[]
test.messages指向origin _messages数组,而后来的_messages正在改变,但test.messages却没有。