javascript - 指令内未触发滚动事件 - angular.js

标签 javascript angularjs events scroll dom-events

我遇到了问题。我有一个无限滚动指令,我在其中监听 scroll 事件。问题是滚动事件仅在我绑定(bind)到 $window 时才会触发:

angular.element($window).bind('scroll', function () {
  console.log('Gogo!'); //works!
});

element.bind('scroll', function () {
  console.log('Gogo!'); //doesn't work... :(((
});

指令位于 ng-view 我发现这个问题,看起来与我的问题非常相似 - Binding to events in a directive which is inside a ng-view doesn't work

有人知道怎么解决这个问题吗?

我的指令:

directives.directive('scrolly', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            var raw = element[0];

            element.bind('scroll', function () {
                if (raw.scrollTop + raw.offsetHeight > raw.scrollHeight) {
                    scope.$apply(attrs.scrolly);
                }
            });
        }
    };
});

我的观点:

<ul class="items-wrap" scrolly="showMore()">
   <li class="item" ng-repeat="item in items">{{item.name}}</li>
</ul>

最佳答案

这可能是因为您绑定(bind)的元素不会“滚动”。

您实际滚动的节点(文档,或者可能是具有滚动溢出的 div)是实际触发事件的东西。

尝试将 $document 注入(inject)您的指令并在其上设置滚动事件:

$document.bind('scroll', function (){});

此外,放弃处理程序内部的 if 语句,直到确定事件正确触发,然后将其添加回来。

刚开始:

app.directive('scrolly', function ($document) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {

            $document.bind('scroll', function () {
                scope.$apply(attrs.scrolly);
            });
        }
    };
});

然后检查元素定位和其他逻辑。

希望对您有所帮助。

关于javascript - 指令内未触发滚动事件 - angular.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21989923/

相关文章:

javascript - 在 Javascript 中使用 new Date() 测量时间的问题

javascript - $q 推迟在 Jasmine 中不触发延续

javascript - setTimeout 中的 setInterval 仅在 angularjs Controller 中触发一次

c++ - C++中的扭曲替代方案

cocoa - 在一个窗口中使用 mouseMoved 的多个自定义控件

javascript - wordpress .post() 500 服务器错误

javascript - 使用 jQuery 过滤下拉菜单

javascript - 使用原型(prototype)的库子模块的私有(private)命名空间

javascript - ng-repeat 中的 Angularjs 函数调用了项目长度的多次

jQuery 移动 : Tap event on listview item also fires hidden object event