gpt4 book ai didi

javascript - AngularJS : Removing rootScope listener doesn't work

转载 作者:行者123 更新时间:2023-12-03 06:43:08 25 4
gpt4 key购买 nike

我在 Controller 中有以下代码:

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”监听器函数被调用 3 次...

如果能理解为什么监听器的函数被多次调用就好了;如果您有解决方案或想法可以帮助我继续下去,我期待阅读它!

最佳答案

deregisterSetPermissions 是一个函数。要取消订阅监听器,您必须调用它。

$scope.$on('$destroy', function() {
deregisterSetPermissions();
}

一般来说,每当你发现自己在 Angular 中使用以双美元符号 ($$) 开头的函数对象时,就意味着你做错了什么 - 这是 Angular 的命名约定这不是他们公共(public) API 的一部分!

关于javascript - AngularJS : Removing rootScope listener doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37862787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com