我有兩個控制器,添加項目和刪除項目,以及模型顯示所有項目。 該模型注入到控制器中(在相同的模板上工作)。AngularJS:處理控制器中的模型數據注入
每當添加一個項目時,我廣播一條消息,該消息由Model收聽,並從服務器重新加載數據。
代碼:
ItemModule.factory('ItemListModal', function ($resource, $rootScope){
var allItem = $resource('item/page/:pageId.json', {'pageId': pageId });
var items = allItem.query();
$rootScope.$on('ItemAdded',function(){
items = allItem.query();
});
return items;
});
//Item is another Model, used to send data on server.
function CreateItemCtrl($scope, $rootScope, Item) {
$scope.save = function() {
Item.save($scope.item, function(data) {
$scope.result = data;
$rootScope.$broadcast('ItemAdded');
}, function(data) {
$scope.result = data.data;
});
}
}
function ListItemCtrl($scope, ItemListModal) {
$scope.allItems = ItemListModal;
}
問題:現在,因爲當第一次加載模板上添加項目它只會改變模式,但這不是重新注入ListItemCtrl上ListItemCtrl的依賴已經解決。由於這個原因,模板上的列表不會改變。
有什麼辦法可以告訴AngularJS重新解析控制器的依賴關係嗎?
我真的不想監聽控制器中的事件並重新查詢數據,因爲還有其他控制器也需要來自服務器的相同數據。
它的工作,謝謝。你能否解釋一下,爲什麼它通過添加另一個間接方式以這種方式工作? –
每次調用allItem.query()時,都會返回對其他對象的引用。如果將第一個對象放在作用域中,則第二個對象不會自動替換它。如果您返回一個指向第一個對象的對象,那麼稍後將該對象修改爲指向第二個對象,那麼您的容器對象將始終處於最新狀態。我希望這有幫助,現在我重讀它聽起來很混亂。 –
明白了!謝謝! –