我试图在作为事件处理程序传递给angular.element($window).on()
的函数中取消绑定我的AngularJS指令中的事件。
从这个问题来看,我已经意识到要仅从当前指令解除绑定,必须将同一个事件处理程序传递给angular.element().on()
和angular.element().off()
AngularJS - Unbind $window of an event from specific directive
这是我在指令返回的对象中的控制器方法;
controller: function($scope, $element) {
var eventHandler = function() {
var windowBottom = $window.pageYOffset + $window.innerHeight;
var elementBottom = $element[0].getBoundingClientRect().bottom;
if (windowBottom > elementBottom) {
console.log($scope.stockID, this);
angular.element($window).off('scroll', this.bind(this));
}
};
angular.element($window).on('scroll', eventHandler.bind(eventHandler));
}
任何帮助理解为什么这不能解开事件将非常感激!
注意:我最初尝试仅将eventHandler
传递给.on()
和.off()
函数,但我意识到this
不是&#39 ;引用eventHandler
函数,因此我用.bind(eventHandler)
调用它。
答案 0 :(得分:0)
有两件事我马上就错了。
1)调用bind()
将返回带有绑定值的新函数。
2)第二次调用函数内的bind()
,什么也没做。
bind()函数创建一个新函数(一个绑定函数),它具有相同的函数体(ECMAScript 5术语中的内部调用属性),因为它被调用的函数(绑定函数的目标函数)具有此值绑定到bind()的第一个参数,它不能被覆盖。
所以基本上,当你打电话给off()
时,你只需要传递事件名称。摆脱第二个参数。该处理程序将与最初传递的处理程序不同,因为您在其上调用bind()
。