0

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 にコントローラーの依存関係を再解決するように指示する方法はありますか?

サーバーからの同じデータを必要とする他のコントローラーがあるため、コントローラーでイベントをリッスンしてそこでデータを再クエリしたくありません。

4

2 に答える 2