AngularJS:在rootScope上广播/发出的事件多次发生

pab*_*era 0 javascript angularjs

我的Angular应用程序已经相当大了,我使用rootScope在指令和控制器之间进行通信.

Directive 1
scope.$root.$broadcast('some:event');

Controller 1
$rootScope.$on('some:event', function() { I get called multiple times :( });
$scope.$on('some:event', function() { I am not getting called at all :( });
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我的听众被多次打电话(确切地说是2倍).我觉得在某个地方,我建在第二个rootScope或其他东西.我正在调试我的应用程序,但这就像在大海捞针中找到针.

该线程试图解决类似的问题:AngularJs广播重复执行次数太多.它建议只使用$ scope,在我的特定情况下对我不起作用.广播的事件从未传达给听众.

我的问题是,如果有人知道为什么会发生这种情况?也许我正在做一个我不知道的愚蠢的错误.抓住一次事件我只发了一次听起来不对.

提前致谢

mic*_*cha 6

使用

$rootScope.$emit('some:event') ;
Run Code Online (Sandbox Code Playgroud)

因为它向上并且根镜是顶级的

使用

var myListener = $rootScope.$on('some:event', function (event, data) { });

$scope.$on('$destroy', myListener); 
Run Code Online (Sandbox Code Playgroud)

别忘了在销毁时取消注册,你在同一级别上有一个总线通信

编辑:对你的问题:也许其他一些听众阻止它进一步冒泡这样:

 $scope.$on('some:event', function (event, data) {
    event.stopPropagation();
 });
Run Code Online (Sandbox Code Playgroud)

而你的听众收到多个时间的原因可能是你多次发送.通过向您的事件发送一个时间字符串进行测试,看看它是否相同

这里是我的Eventbus工厂拨弄我使用http://jsfiddle.net/navqtaoj/2/ 有时好老观察者模式也的作品罚款:http://jsfiddle.net/b742qdpz/ 如果是开销很大观看服务中的价值