我试图在作为事件处理程序传递给angular.element($window).on()
的函数中,在我的AngularJS指令中解除绑定事件。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
没有引用eventHandler
功能,因此为什么我和.bind(eventHandler)
的说法。
一次可以在页面上有多个控制器。我在这里看到内存泄漏,如果事件在每次实例化这些控制器时都受到约束,并且没有任何事物保证它们将被删除。一旦范围被销毁,您也许想要移除该事件。 – arjabbar