私は問題にこだわっています。 scroll
イベントをリッスンする無限スクロールのディレクティブがあります。問題は、$window
にバインドしているときにのみscrollイベントが発生することです。
angular.element($window).bind('scroll', function () {
console.log('Gogo!'); //works!
});
element.bind('scroll', function () {
console.log('Gogo!'); //doesn't work... :(((
});
ディレクティブはng-view
の中にあります。この質問を見つけました。私の問題と非常によく似ています- ng-viewの中にあるディレクティブのイベントへのバインドが機能しません
誰もこれを解決する方法を知っていますか?ありがとう!
私の指示:
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>
ここでフィドルを作成しました: http://jsfiddle.net/ADukg/4831/
おもしろいのは、私があなたの正確なコードを使用したことであり、すべてがうまくトリガーされるようです(すべての散らばったconsole.log()
呼び出しを参照)。オーバーフローを正しく使用しないと、スクロールイベントをトリガーできなかったため、問題はCSSスタイリングに関係していると思われます。
おそらく、バインドしている要素が「スクロール」しないためです。
実際にスクロールしているノード(ドキュメント、またはスクロールオーバーフローのあるdiv)は、実際にイベントを発生させるものです。
_$document
_をディレクティブに挿入し、その上にスクロールイベントを設定してみてください:
$document.bind('scroll', function (){});
また、イベントが適切に発生することが確実になるまで、ハンドラーの内側のifステートメントを捨て、thenを追加し直します。
始めましょう:
_app.directive('scrolly', function ($document) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
$document.bind('scroll', function () {
scope.$apply(attrs.scrolly);
});
}
};
});
_
次に、要素の配置やその他のロジックを調べます。
それがお役に立てば幸いです。