ngInfiniteScroll - マウススクロールごとにloadMore()メソッドが呼び出されます 質問する

ngInfiniteScroll - マウススクロールごとにloadMore()メソッドが呼び出されます 質問する

解決策は下記のコメント欄に記載されています。

問題: 私の 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の質問とそれに関連する回答を参照してください詳細については。

おすすめ記事