AngularJS - 解除特定指令中事件的$窗口

Kou*_*sha 15 angularjs

在我的一个指令中,我使用了angular.element($window).bind('scroll').当指令被销毁时,我想要unbind它.通常情况下,我会这样做:

$scope.$on('$destroy', function()
{
    angular.element($window).unbind('scroll');
});
Run Code Online (Sandbox Code Playgroud)

但是,如果另一个指令也与该scroll事件结合$window,并且该事件仍然需要存在,那该怎么办呢?如果我使用unbind上面的内容,那么另一个指令的绑定也会被删除.

我有什么选择?

tas*_*ATT 35

在传递给bind/on时,将相同的函数引用传递给unbind/off,以取消绑定该特定的处理程序:

var fn = function () {};

angular.element($window).on('scroll', fn);

angular.element($window).off('scroll', fn);
Run Code Online (Sandbox Code Playgroud)

例如:

var onScrollAction = function () {
  // Do something 
};

angular.element($window).on('scroll', onScrollAction);

scope.$on('$destroy', function () {

  angular.element($window).off('scroll', onScrollAction);
});
Run Code Online (Sandbox Code Playgroud)

请注意,在jQuery中,函数bindunbind不推荐使用.但是你可以在jQuery和jqLit​​e中使用它们,因为它们只是调用它们onoff幕后.