【发布时间】:2016-06-16 14:58:59
【问题描述】:
我在控制器中有以下代码:
var deregisterSetPermissions = $rootScope.$on("setPermissions", function () {
[... some code used when the user click on a "create account" button...]
});
$scope.$on('$destroy', function() {
deregisterSetPermissions;
[... and other listeners are unregistered ...]
}
当我离开页面时,所有监听器都未注册:我可以通过 chrome 开发者控制台看到 $rootScope.$$listeners.setPermissions[] 包含一个值,即 null。
当我返回页面并加载后,$rootScope.$$listeners.setPermissions[0] 包含 null 并且 $rootScope.$$listeners.setPermissions[1] 包含侦听器必须调用的函数。 $rootScope.$$listenerCount.setPermissions 为 1。
但是当我点击“创建帐户”按钮时,“setPermissions”监听器使用的函数被调用了两次! 怎么可能?
这是我尝试过的: 1-检查没有创建名称为“setPermissions”的其他侦听器 2- 作用域被销毁时删除监听器的内容:
$scope.$on('$destroy', function() {
$rootScope.$$listeners.setPermissions=[];
$rootScope.$$listenerCount.setPermissions = 0;
});
但在那之后,如果我离开页面并返回 3 次,单击“创建帐户”按钮将导致“setPermissions”-listener-function 被调用 3 次...
很高兴了解为什么监听器的函数被多次调用;如果您有解决方案或想法来帮助我继续下去,我期待着阅读它!
【问题讨论】:
-
你用尾随括号调用
deregisterSetPermissions(),对吧?
标签: javascript angularjs