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

标签 javascript angularjs

我的 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/

相关文章:

javascript - 将格子图案添加到动态绘制的 3 人国际象棋棋盘

javascript - 在 PHP 中发送请求之前将用户数据附加到 url

javascript - JS - 窗口的宽度从高于 800px 的像素数量减少到 800px 以下会导致触发 Action

javascript - AngularJS 无法使用常规表单

javascript - Angular Controller 的频繁更新未反射(reflect)在 View 中

javascript - 文件名中 $Revision$ 的 IE6 Javascript 问题

javascript - 我的变量出了什么问题,它是未定义的

javascript - 在单页应用程序中使用 AngularJS 的多个 Controller

javascript - 在按钮 onClick 中从另一个 Controller 调用函数

angularjs - 如何使用 "controller as"语法调用 $scope.$apply()