AngularJS - 同一函数中的unbind事件传递给bind?

时间:2015-09-08 20:15:43

标签: javascript angularjs jqlite

我试图在作为事件处理程序传递给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)调用它。

1 个答案:

答案 0 :(得分:0)

有两件事我马上就错了。

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

2)第二次调用函数内的bind(),什么也没做。

来自MDN's site

  

bind()函数创建一个新函数(一个绑定函数),它具有相同的函数体(ECMAScript 5术语中的内部调用属性),因为它被调用的函数(绑定函数的目标函数)具有此值绑定到bind()的第一个参数,它不能被覆盖。

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