在我的Angular應用程序中,我創建了一個簡單的指令來根據提供給類似問題here的答案在滾動上做些事情。Angular指令檢測ng-repeat容器內的滾動
下面是代碼我onScroll
指令:
(function() {
'use strict';
angular
.module('proverbial')
.directive('onScroll', Directive);
Directive.$inject = [ '$document' ];
function Directive($document) {
var directive = {
link: link,
restrict: 'A'
};
return directive;
function link(scope, element, attrs) {
element.bind('scroll', function(e) {
console.warn(e)
if (element[ 0 ].scrollTop + element[ 0 ].offsetHeight >= element[ 0 ].scrollHeight) {
scope.$apply(attr.onScroll);
}
});
}
}
})();
這是在下面的HTML模板中使用:
<div class="absolute" on-scroll="vm.totalDisplayed += 100">
<span class="card hover"
ng-repeat="proverb in vm.proverbs | limitTo: vm.totalDisplayed">
<a>{{proverb.text | maxLength: 90}}</a>
</span>
</div>
的目的是保持頁面滾動增加vm.totalDisplayed
,以創建一個類似於延遲加載的效果。
但是,當我向下滾動到已經加載了ng-repeat的結尾時,什麼也沒有發生。 console.warn(e)
從不觸發。
在瀏覽器控制檯上,我可以看到包含<div class="absolute" on-scroll="vm.totalDisplayed += 100">
確實向上滾動瀏覽器的窗口。
什麼是缺失?
'attr.onScroll'是一個不會被執行的字符串: 'scope。$ apply(attr.onScroll);' – charlietfl