Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS事件监听器内部指令链接函数在每次路由更改时触发_Angularjs - Fatal编程技术网

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

AngularJS事件监听器内部指令链接函数在每次路由更改时触发,angularjs,Angularjs,我有一条带有自定义指令的路线。在它的link函数中,我监听窗口对象上的事件,该对象调用范围上的方法 问题是,如果每次将具有此指令的路由重定向到,它都会运行link函数,导致多个事件侦听器被添加到窗口事件中 我怎样才能避免这种情况?我尝试使用compile函数,但它没有访问scope的权限,因此无法在其中调用scope.myMethod() 谢谢。我建议您在指令的范围内使用$destroy事件(请参阅中的$destroy),并在那里进行必要的清理。诸如此类: angular.directive('

我有一条带有自定义指令的路线。在它的link函数中,我监听
窗口
对象上的事件,该对象调用
范围
上的方法

问题是,如果每次将具有此指令的路由重定向到,它都会运行link函数,导致多个事件侦听器被添加到
窗口
事件中

我怎样才能避免这种情况?我尝试使用compile函数,但它没有访问scope的权限,因此无法在其中调用
scope.myMethod()


谢谢。

我建议您在指令的范围内使用$destroy事件(请参阅中的$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
      });
    }
  };
}]);

应该会的。

谢谢你,尼古拉斯。在编译阶段添加侦听器(如果可能的话)不会阻止这一点,对吗?我总是要叫人清理$destroy?