Angularjs 有角度的破坏正在堆积
我有两个控制器,其中一个有$destroy函数,用于模型关闭时Angularjs 有角度的破坏正在堆积,angularjs,Angularjs,我有两个控制器,其中一个有$destroy函数,用于模型关闭时 > $scope.$on("$destroy", function() { > > var args = {}; > $rootScope.$emit('refreshh', args); > }); 在另一个控制器中,我有 $rootScope.$on('refreshh', function(event, args) {
> $scope.$on("$destroy", function() {
>
> var args = {};
> $rootScope.$emit('refreshh', args);
> });
在另一个控制器中,我有
$rootScope.$on('refreshh', function(event, args) {
console.log("modal closed");
});
当我继续打开和关闭模型时,它工作正常,我得到“模式关闭”,但如果我从导航栏转到另一个页面(不刷新页面)并返回该页面,我将得到“模式关闭”“模式关闭”,如果我重复此过程,我将得到“模式关闭”“模式关闭”好像代码运行了X次。这可能是什么?当您将
$on
侦听器绑定到$rootScope
并且没有显式销毁该侦听器(),那么每次实例化第二个控制器时,它都会向$rootScope
添加另一个相同的侦听器。在第二个控制器中,您需要绑定到本地$scope
,或者确保在第二个控制器被销毁时销毁侦听器
第二控制器:
var deregisterListener = $rootScope.$on('refreshh', function(event, args) {
console.log("modal closed");
});
$scope.$on("destroy", function() {
deregisterListener();
});
如果没有这一点,最终发生的情况是,每次实例化第二个控制器时,您的
$rootScope
都会安装一个侦听器,导致所有相同的侦听器同时启动。我认为您的问题在于您正在声明$rootScope.$on的控制器('refreshh'…
当您在$rootScope
中注册事件时,即使您的控制器被破坏,它仍将保持与$rootScope
的绑定。请尝试执行$scope.$on('refreshh'…
)操作。希望它能解决您的问题。