0

我试图在作为事件处理程序传递给angular.element($window).on().

从这个问题,我开始意识到,要解除与当前指令的绑定,必须将相同的事件处理程序传递给angular.element().on()两者angular.element().off()

AngularJS - 从特定指令解除事件的 $window 绑定

这是指令返回的对象中的我的控制器方法;

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()and.off()函数,但是我意识到这this并没有引用eventHandler函数,因此我用.bind(eventHandler).

4

1 回答 1

1

有两件事我立即看到了错误。

1) 调用bind()返回一个带有绑定值的新函数。

2)函数内部的第二次调用bind(),什么都不做。

来自MDN 的网站

bind() 函数创建一个新函数(绑定函数),其函数体(ECMAScript 5 术语中的内部调用属性)与正在调用它的函数(绑定函数的目标函数)相同,并将 this 值绑定到bind() 的第一个参数,不能被覆盖。

所以基本上,当你打电话时,off()你只需要传入事件名称。摆脱第二个参数。该处理程序将与您调用bind()它时最初传入的处理程序不同。

于 2015-09-08T20:26:25.180 回答