AngularJs 广播重复执行太多次

标签 angularjs angularjs-scope

在我的一个 Angular Controller 中,我有这个:

// controller A
$rootScope.$on("myEventFire", function(event, reload) {
    someAction();
});

在另一个 Controller 中我有这个:

// controller B
$scope.openList = function(page) {
    $rootScope.$broadcast('myEventFire', 1);
}

现在,这是一个单页应用程序。当我最初转到 Controller A 并尝试触发此事件时,someAction() 将被执行一次。如果我离开并再次返回 Controller A 并执行相同的操作,则 someAction() 会执行两次。如果我再做一次,它会发生三次,依此类推。 我在这里做错了什么?

最佳答案

您可以尝试仅使用$scope.$on()吗?每次创建 Controller A 时,它都会在根作用域上添加一个新的监听器,并且当您导航离开和返回时,该监听器不会被破坏。如果您在 Controller 的本地作用域上执行此操作,则当您离开并且您的作用域被破坏时,监听器应该被删除。

// controller A
$scope.$on("myEventFire", function(event, reload) {
    someAction();
});

$broadcast 将事件向下发送到所有子作用域,因此应该在您的本地作用域中拾取该事件。 $emit 以另一种方式向上冒泡到根范围。

关于AngularJs 广播重复执行太多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553598/

相关文章:

javascript - Angular 对象如何获取另一个对象的值

javascript - forms.$valid 显示 true,但打印为 false

javascript - 范围变量不可访问(未定义)-AngularJS

angularjs - 使用 ui-router 在一页上显示多个状态

html - AngularJs 将 http 响应对象分配给来自 html 的范围

javascript - ng-model 未捕获 ng-repeat 中的值

javascript - 如何在 Angular JS 中的动画之后触发 Controller 功能

javascript - 数据库插入后,Angularjs 通过 $http.get 服务刷新 View

javascript - 谷歌地图API自动完成显示位置的 map 预览

javascript - AngularJS 嵌套 ng-repeat