事件监听器不会被销毁

时间:2017-08-25 10:53:53

标签: javascript angularjs listener

在我的angularjs应用程序中,我有一个带有以下代码的指令:



listener = $rootScope.$on('currentDate', function(e, now) {
  console.log('date updated.')
}, true);

$scope.$on('$destroy', function() {
  console.log('event destroyed.')
  listener();
});




它是一个监听器,等待来自rootcope的广播,每秒通过当前日期。因为我不希望这个监听器在指令被销毁后继续存在,所以我在destroy事件中调用了监听器返回函数(它应该取消绑定监听器)。

我可以在日志中看到调用destroy,但是每秒都会调用侦听器。

有没有更好的方法来实现这一目标?是否使用rootScope"角度友好"?

1 个答案:

答案 0 :(得分:0)

你并没有在rootScope上销毁它:

listener = $rootScope.$on('currentDate', function(e, now) {
  console.log('date updated.')
}, true);

$rootScope.$on('$destroy', function() {
  console.log('event destroyed.')
  listener();
});

所以看到你的评论后,考虑一下,这可能会更好:

link(scope, element, attrs, ngModel) {
  const listener = scope.$on('currentDate', function(e, now) {
    console.log('date updated.')
  }, true);

  scope.$on('$destroy', () => {
    listener();
  });
}

另一个问题是,如果你在一个指令中,那么也许你不应该使用$ rootScope,而是使用'scope'(使用上面的例子)。