重复使用指令时会创建多个绑定

时间:2014-04-23 14:40:55

标签: javascript angularjs events infinite-scroll

我正试图让无限加载指令起作用。所以我为这样的窗口滚动事件创建了一个绑定。

    angular.element($window).bind('scroll',function()
    {
        _onScroll($scope);
    });

在我的_onScroll方法中,我像这样登录控制台滚动位置。

    var $wnd = angular.element($window);
    var pageTop = $wnd.scrollTop() + $wnd.height();
    var markerTop = $loadMore.offset().top;

    console.log('pageTop: '+pageTop+' markerTop: '+markerTop);

除非我导航到应用程序的其他部分,然后返回带有infinity指令的页面,否则此方法无效。

问题是_onScroll被称为重复次数。每次我导航回无限指令时,都会添加对_onScroll

的附加调用

例如;

我第一次在控制台看到。

pageTop: 300 markerTop: 1000
pageTop: 600 markerTop: 1000
pageTop: 900 markerTop: 1000

第二次,我会看到为每个滚动事件打印两行。

pageTop: 300 markerTop: 1000
pageTop: 300 markerTop: 1000
pageTop: 600 markerTop: 1000
pageTop: 600 markerTop: 1000
pageTop: 900 markerTop: 1000
pageTop: 900 markerTop: 1000

等等......

似乎angular.element($window).bind(..)是持久性的,当不再使用该指令时,我需要以某种方式取消绑定它。

我该怎么做?应该注意的是,该指令没有孤立的范围,因此我无法监视要销毁的范围。

1 个答案:

答案 0 :(得分:1)

您可以绑定到指令中的jQuery destroy事件:

element.on('$destroy', function() {
    // unbind
});