Angularjs - 广播事件被解雇双

问题描述:

我有这个简单的代码:Angularjs - 广播事件被解雇双

<modal ng-controler="Contacts"> 
//add new contact stuffs 
</modal> 

<div ng-controller="Contacts"> 
// show the new contact when added 
</div> 

.controller('Contacts', function ($scope, contactsFactory) { 

contactsFactory.doSomething(); 
$scope.$on('contacts:addedNewContact', function (event, data) { 

     console.log('yo'); 
}); 
}) 
.factory('contactsFactory', function ($rootScope) { 
var addNew = function (username, email) { //facoltative, we can get them via email OR username 

      return $http({ 
      'method':'POST', 
      'url': appWS + '/api/contact', 
      'data': { 
       'email':email, 
       'username':username 
      } 
      }).then(function (response) { 

      if (response && response.status === 200) { 

       $rootScope.$broadcast('contacts:addedNewContact', response.data); 
      } 

      }).catch(function (err) { 

      $rootScope.$broadcast('contacts:errorAddingNewContact'); 
      $window.console.error('Error while retrieving contact user data: ' + err); 
      }); 
     }; 

    return { 
     'addNew':addNew 
    }; 
}); 

广播联系人:addedNewContact实际上是把控制台“哟”的2倍。

我不明白为什么它会被双击而不是一次。

赞赏任何帮助,感谢

+1

在您的模板中,您正在初始化控制器“联系人”两次=两个列表程序员=两个“哟”。 – 2014-10-08 11:37:39

+0

现在感谢它的明确:) – sbaaaang 2014-10-08 12:28:40

您有使用控制器两个div,因此它被实例化2次,注册监听器和监听器都将被触发。

+0

也避免使用$ rootScope。$广播,它会推动事件通过所有活动范围,并可能是非常可怕的性能明智。请使用$ rootScope。$ emit和$ rootScope。$ on。 – 2014-10-08 11:42:33

+0

确定但注册2次一些事件列表是不是真的解决方案,我想我必须使用一个指令,所以不知道 – sbaaaang 2014-10-08 12:20:35

+0

我会移动逻辑的指令,我想,谢谢 – sbaaaang 2014-10-08 12:28:08