AngularJS事件监听器在指令链接函数内部触发每个路由更改

时间:2013-11-19 12:44:03

标签: angularjs

我有一个有自定义指令的路由。在它的链接功能中,我在window对象上侦听一个事件,该事件调用scope上的方法。

问题在于,如果每次将具有此指令的路由重定向到时,它将运行链接函数,从而导致将多个事件侦听器添加到window事件中。

我该如何避免这种情况?我尝试使用编译功能,但它无法访问范围,因此我无法在其中调用scope.myMethod()

感谢。

1 个答案:

答案 0 :(得分:2)

我建议您在指令范围内使用$ destroy事件(请参阅scope documentation中的$ destroy)并在那里进行必要的清理。这样的事情:

angular.directive('MyDirective', ['$rootScope', function($rootScope) {
  return {
    restrict: 'EAC',
    link: function(scope, element, attrs) {
      .... //Code of your directive

      scope.$on('$destroy', function() {
        console.log("destroy");
       //clean up - removeListeners
      });
    }
  };
}]);

应该做的伎俩。