我的 Angular 应用程序已经相当大了,我正在使用 rootScope 在指令和 Controller 之间进行通信。
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 :( });
出于某种原因,我的听众被多次调用(准确地说是 2 次)。我有一种感觉,在某个地方,我内置了第二个 rootScope 或其他东西。我目前正在调试我的应用程序,但这就像大海捞针一样。
该线程尝试解决类似的问题:AngularJs broadcast repeating execution too many times 。它建议仅使用 $scope ,这在我的特定情况下对我不起作用。广播的事件永远不会到达听众。
我的问题是,是否有人知道为什么会发生这种情况?也许我犯了一个我没有意识到的愚蠢错误。捕获一个事件两次而我只发送一次确实听起来不对。
提前致谢
最佳答案
使用
$rootScope.$emit('some:event') ;
因为它向上,根范围是顶层
使用
var myListener = $rootScope.$on('some:event', function (event, data) { });
$scope.$on('$destroy', myListener);
不要忘记在销毁时取消注册,并且您在同一级别上有总线通信
编辑:对于您的问题:也许其他一些监听器会阻止它进一步冒泡,如下所示:。
$scope.$on('some:event', function (event, data) {
event.stopPropagation();
});
您的听众多次接收的原因可能是您发送了多次。测试与您的事件一起发送时间字符串,看看它是否相同
这是我使用的 Eventbus 工厂的 fiddle http://jsfiddle.net/navqtaoj/2/ 有时,旧的观察者模式也可以很好地工作: http://jsfiddle.net/b742qdpz/如果观察服务中的值的开销太大
关于javascript - AngularJS:在 rootScope 上广播/发出的事件多次发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28124442/