Item を追加して Item を削除するための 2 つのコントローラーと、すべてのアイテムを表示するためのモデルがあります。このモデルはコントローラーに注入されます (同じテンプレートでの作業時)。
アイテムが追加されるたびに、モデルがリッスンするメッセージをブロードキャストし、サーバーからデータをリロードします。
コード:
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 にコントローラーの依存関係を再解決するように指示する方法はありますか?
サーバーからの同じデータを必要とする他のコントローラーがあるため、コントローラーでイベントをリッスンしてそこでデータを再クエリしたくありません。