解決策は下記のコメント欄に記載されています。
問題: 私の loadMore() メソッドは、コンテナのスクロールごとに実行されます。
意味: loadMore() は親コンテナのマウススクロールごとに実行されます ( infinite-scroll-parent="true"
)
望ましい結果: loadMore() を取得するには、infiniteScrollDistance が条件を満たした場合にのみ実行し、私が行うような軽いスクロールは実行しません。
私のアプリは写真ギャラリーです。写真を Ajax 呼び出しで読み込み、サムネイル ディレクティブ リピーターに入力します。コントローラーの初期化時に ng-Infinite-Scroll を無効にし、コールバックが成功したら有効にします。
<div class="thumbnails grid__item page--content">
<div id="gallery" class="unstyled-list"
infinite-scroll='loadMore()'
infinite-scroll-disabled='album.busy'
infinite-scroll-parent="true"
infinite-scroll-immediate-check="false"
infinite-scroll-distance='2'>
<my-photo-directive ng-repeat="photo in photos"></my-photo-directive>
</div>
</div>
私のコーヒー コードには驚くようなことはありません。単純な console.log を配置しても問題は発生するため、そのロジックは重要ではありません.....
$scope.album.busy = true
$scope.loadMore = ->
$scope.$apply ->
$scope.album.busy = true
console.log('loadMore() been executed here')
私のサムネイル ディレクティブは同じです。驚くことではありませんが、最後の瞬間の写真がリピーターに取り込まれ、コンポーネントが有効になります。
app.directive 'myPhotoDirective', ['$window', ($window) ->
return {} =
....
link: (scope, element, attrs) ->
if scope.$last
scope.album.busy = false
何が足りないのか、何が間違っているのか全く分かりません。誰かが助けてくれることを願っています。
ありがとう。
ベストアンサー1
実際のコードを見るための Plunker がない場合は、ngInfiniteScroll の FAQ に直接アクセスします。
ngInfiniteScroll がすべてのスクロール イベントで式をトリガーするのはなぜですか?
infiniteScroll ディレクティブは、それがアタッチされている要素の高さを使用して、それがウィンドウの下部にどれだけ近いかを判断します。場合によっては、ブラウザが高さ 0 を報告することがあり、これがこの動作の原因となります。通常、これはフロートされた子要素のみを含むコンテナ要素が原因です。この問題を解決する最も簡単な方法は、コンテナの下部に「スペーサー」要素を追加することです ( ; など)
<div style='clear: both;'></div>)
。このStackOverflowの質問とそれに関連する回答を参照してください詳細については。