控制器生命周期和发射/广播

时间:2015-12-11 09:48:54

标签: javascript angularjs

在我的页面上,我有一个网格,列出了Web服务返回的所有文章。用户可以转到单独的页面添加新文章,完成后,应将文章添加到另一页面的网格中。因此,当用户返回该页面时,将列出该文章。

我有一个服务来处理2个控制器之间的通信(一个用于网格,一个用于添加文章)。这个服务有一个AddArticleController调用的函数,它向我的GridController广播一条消息:

#include<iostream>

using namespace std;

gridController选择了这个:

function addNewArticle(articleNumber) {
    $rootScope.$emit('newArticleAdded', {
      articleNumber: articleNumber
    });
}

问题在于,当已经多次显示带有网格的页面时,文章会多次添加到网格中。我假设这是因为每次创建一个新控制器,但旧控制器没有被销毁,所以广播被多次拾取。

如何解决此问题?显然,广播应该只处理一次。

2 个答案:

答案 0 :(得分:0)

承认我是从无知的位置说出来的;让服务维护文章列表并让控制器观察到它会不容易?它将避免在示波器中来回发送消息并且只有一个事实来源。

答案 1 :(得分:0)

服务

myApp.service('myService',function($controller){
 this.broadcastEvent = function(){
  scope = $scope.$new(); 
      $controller('mainCtrl',{
        $scope:scope
      });
     scope.broadCastMethod();
 }

});

控制器

myApp.controller('mainCtrl',function($scope){
 $scope.broadCastMethod = function(){
  $scope.$broadcast("callBraodcast");
 }

})