使用Angular.js(1.x)。
$rootScope
上取消注册事件侦听器似乎不会从$$listeners
属性数组中删除侦听器。我错过了什么吗?
我在这里使用$scope.$root
来访问$rootScope
。
> $scope.$root.$$listeners Object $locationChangeSuccess: Array[1] __proto__: Object
cat
上添加$rootScope
监听器。> var dog = $scope.$root.$on("cat", function() {}); undefined
cat
侦听器已添加。> $scope.$root.$$listeners Object $locationChangeSuccess: Array[1] cat: Array[1] __proto__: Object
dog
函数取消注册。> dog() undefined
cat
侦听器是否为空/已删除。不。> $scope.$root.$$listeners Object $locationChangeSuccess: Array[1] cat: Array[1] // ???? I would expect this to be 0 now __proto__: Object
> $scope.$root.$apply() undefined
cat
侦听器是否为空/已删除。不。> $scope.$root.$$listeners Object $locationChangeSuccess: Array[1] cat: Array[1] // Nope. __proto__: Object
答案 0 :(得分:0)
因此该事件已取消注册。但是,不会清除$$listeners
数组属性。通常,$$listeners
数组属性将包含回调函数,但在取消注册后,它将替换为null。
此行为令人担忧,因为当您注册/取消注册侦听器时,阵列将继续增长。我不确定它是否在某个时刻被垃圾收集。
> $scope.$root.$$listeners["cat"] [null, null, function]