我正在使用AngularJS,我無法正確綁定需要時間加載的模型。我有這個服務稱爲ListService:角度js模型不綁定
angular.module('3pix').factory('ListService', ['$q', '$timeout', 'underscore', 'Item', 'ItemResource',
function ($q, $timeout, _, Item, ItemResource) {
var List = function() {
};
_.extend(List.prototype, {
_addItem: function(item) {
this.items || (this.items = []);
this.items.push(item);
},
loadItems: function() {
var scope = this;
var deferred = $q.defer();
ItemResource.get_items({id: 39}, function(itemsData) {
itemsData.forEach(function(itemData) {
scope._addItem(new Item(itemData));
});
deferred.resolve(scope.items);
});
return deferred.promise;
}
});
return List;
}]);
我真正ListService比這複雜得多,但我只複製了相關部分,所以我可以問我的問題清楚。
稱爲ListController而且我的控制器使用會從路由器一個'清單「決心」選項:
angular.module('3pix').controller('ListController', ['$scope', 'jquery', 'list',
function ($scope, $, list) {
$scope.list = list; //<-------- Here I got the list, I get it fine from the router
list.loadItems(); //<------- Here I load the list's items
}]);
在我看來,我有:
<div class="item-wrapper"
ng-repeat="item in list.items">
{{item}}
</div>
我的問題是後項加載到控制器中,視圖不會顯示這些項目並且不會畫任何東西。我試圖將loadItems的成功方法封裝在$ timeout和$ rootScope。$ apply中,但它沒有幫助。任何想法如何解決它?
UPDATE
我跟着@Chandermani的建議,我在我的控制器那樣:
list.loadItems().then(function() {
$scope.items = list.items;
});
的項目被裝載在視圖中,不過,有時候,當我使用更新list.items _addItem()方法,什麼也沒有發生,視圖不顯示新項目。我試着用$超時包裹_addItem()如下,但它並沒有幫助或者:
_addItem: function(item) {
$timeout(function() {
this.items || (this.items = []);
this.items.push(item);
});
}
試試這個,因爲你正在返回的承諾哪裏是你那麼控制器聲明? –
@Ajaybeniwal:控制器中的聲明應該是什麼? List.items是變化,它不應該影響控制器的list.item? – Naor