每次都为所有实例触发AngularJS指令$ document click事件

时间:2014-05-02 11:04:11

标签: javascript jquery angularjs angularjs-directive

我想在文档中附加一个事件。单击文档时,我想删除我的指令元素。但它也在为所有过去的实例开火。

以下是代码:

link: function(scope, iElement, iAttrs) {
      $document.on('click',function(){
          iElement.slideUp('fast',function(){
              $(this).remove();
          });
      });
    }

2 个答案:

答案 0 :(得分:8)

尝试删除destroy处理程序中的处理程序

link: function (scope, iElement, iAttrs) {
    function handler() {
        iElement.slideUp('fast', function () {
            $(this).remove();
        });
    }

    $document.on('click', handler);
    scope.$on('$destroy', function () {
        $document.off('click', handler);
    })
}

答案 1 :(得分:4)

当你添加这样的jQuery事件时,即使在指令被销毁之后,事件也会保持活跃状态​​。你必须特别关闭这个事件:

link: function(scope, iElement, iAttrs) {
  $document.on('click',function(){
      iElement.slideUp('fast',function(){
          $(this).remove();
          $document.off('click');
      });
  });
}