【问题标题】:angular: binding to scroll event not working角度:绑定到滚动事件不起作用
【发布时间】:2015-01-07 12:26:43
【问题描述】:

我正在尝试关注这个 jsfiddle:

http://jsfiddle.net/vojtajina/U7Bz9/

现在我的脚本文件中有这个:

var app = angular.module('my-app', [
       'scroll',
       'ui.bootstrap',
       'ngRoute']);

var scrollService = angular.module('scroll', []).directive('whenScrolled', function() {
    return function(scope, elm, attr) {
        var raw = elm[0];
        console.log("binding");

        elm.bind('scroll', function() {
          console.log("scrolling");
            if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
                scope.$apply(attr.whenScrolled);
            }
        });
    };
});

HTML 文件(jade 表示法)具有: 编辑:我添加了一个 id 和 CSS

div#lista_iniciativas.row(when-scrolled="loadMore()")

然后

#lista_iniciativas {
  overflow: auto;
}

`

问题是我可以在控制台中看到“绑定”日志,但看不到“滚动”,即使调试我也无法进入绑定功能......换句话说,绑定功能永远不会触发。知道这里有什么问题吗?是不是我绑定的方式有点不对?

【问题讨论】:

  • 'binding' 会在你放置指令的地方触发,你能展示更多关于你的 html 或在 jsfiddle 或一些中复制问题吗?如果未触发“滚动”事件..您是否在有效 div 上使用指令?或正确的元素,对于溢出很重要 attr be: 'auto' or 'scroll'..
  • @rahpuser 感谢您的参与。我正在使用有效的div 作为elm,实际上我可以在调试器中看到它是正确的。它有overflow 'auto'(也试过scroll)。到目前为止,我通过将$document 注入函数并对其进行绑定更进一步——这很有效……我不知道你还想要什么?
  • 好的,所以你已经修复了它?..我要求一个 jsfiddle 来重现你遇到的问题..另外,我建议限制或消除滚动功能..
  • 嗯,是的,它以某种方式修复了,虽然我不明白为什么帖子中的代码不起作用......
  • 你是怎么解决的?实际上帖子中的代码有效..我已经尝试过该代码

标签: javascript angularjs angularjs-directive bind


【解决方案1】:

这是我发现对我有用的方法。

这可能不是最好的解决方案,@rahpuser 报告说原始帖子中的代码确实可以工作......所以......

var scrollService = app.directive('whenScrolled', function($document, $window) {
    return function(scope, elm, attr) {
        var raw = elm[0];

        $document.bind( 'scroll', function() {
          if( ($window.innerHeight + $window.scrollY) > getDocHeight() - 100) {
                scope.$apply(attr.whenScrolled);
          } 
        });
    };
});

【讨论】:

  • 有趣..所以你正在注入 $document 并绑定到 $document.. 你能显示你的 HTML 吗?对我来说,您似乎使用了错误的 DOM 元素,因为如果我没记错的话,$document 是 window.document 的包装器,并且绑定就像绑定在正文上一样,对吗?
  • 可能元素的容器也在滚动,所以你可以看到滚动,但滚动不属于你想要的 div。你能看看这个吗?我的猜测是你的容器(可能是 body )开始溢出并放置一个滚动条,然后你的 div 继承了容器的高度,所以当你使用 $document 工作时..你的 div 有固定的高度吗?跨度>
猜你喜欢
  • 2015-11-02
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 2015-09-05
  • 2019-01-25
  • 1970-01-01
  • 2018-01-07
  • 2018-12-25
相关资源
最近更新 更多