Angularjs $on 调用了两次
Angularjs $on called twice
所以我遇到这样的情况,其中一个 controller
是 emitting
event
,另一个 controller
是 listener
。这是代码:
在controller A
中,我有这个方法:
$scope.process = function () {
var taskName = 'process';
$scope.$emit('process', taskName);
}
在 controller B
中,我有这个:
$rootScope.$on('process', function (event, taskName) {
//Do something here
});
现在,每当我访问应用程序的其他页面并返回此页面时,都会创建两次 process
侦听器。我无法使用 controller
范围,因为 event
从其他 controller
获得 emitted
。侦听器完成任务后如何销毁它?我也试过 $scope.$destroy()
。真的不行。这样做的正确方法是什么?
我在 Angularjs 1.4.7
.
通常你会用不同的方式来做:
$rootScope.$broadcast(...)
...
$scope.$on(...)
那你就不用退订了。
如果您出于某种原因确实需要订阅 $rootScope,那么:
var deregister = $scope.$on(...);
...
deregister(); // destory that listener
所以我遇到这样的情况,其中一个 controller
是 emitting
event
,另一个 controller
是 listener
。这是代码:
在controller A
中,我有这个方法:
$scope.process = function () {
var taskName = 'process';
$scope.$emit('process', taskName);
}
在 controller B
中,我有这个:
$rootScope.$on('process', function (event, taskName) {
//Do something here
});
现在,每当我访问应用程序的其他页面并返回此页面时,都会创建两次 process
侦听器。我无法使用 controller
范围,因为 event
从其他 controller
获得 emitted
。侦听器完成任务后如何销毁它?我也试过 $scope.$destroy()
。真的不行。这样做的正确方法是什么?
我在 Angularjs 1.4.7
.
通常你会用不同的方式来做:
$rootScope.$broadcast(...)
...
$scope.$on(...)
那你就不用退订了。 如果您出于某种原因确实需要订阅 $rootScope,那么:
var deregister = $scope.$on(...);
...
deregister(); // destory that listener