Angularjs $on 调用了两次

Angularjs $on called twice

所以我遇到这样的情况,其中一个 controlleremitting event,另一个 controllerlistener。这是代码:

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