在我的一个 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/