私はスタックオーバーフローに関する多くの投稿を調べてきましたが、まだ答えを見つけることができませんでした. jQuery スクロールバー プラグイン (nanoscroll) があり、ng-repeat の後に更新したいと考えています。ここの多くの投稿が示唆するように、私は次のようなディレクティブを使用しました:
myApp.directive("postRender", function() {
return function(scope, element, attrs) {
jQuery('.nano').nanoScroller({preventPageScrolling: true});
}
});
そして、私は次のようなものを持っています:
<div class="nano"> <!-- my scrollable area -->
<div ng-controller="MyController">
<div ng-repeat="item in items" post-render>
...
</div>
</div>
Some content here...
</div> <!-- my scrollable area -->
問題は、コンテンツが利用可能なサイズよりも少し大きい場合.nano div
、スクロールバーが表示されないことです (理由はわかりません)。
AngularJS は nanoscroller を更新しようとする前にコントローラーの後にコンテンツを挿入するのを待たず、このコンテンツは posrt-render ディレクティブの後に追加されると思います。ところで、F11 を 2 回 (全画面表示して通常モードに戻す) 押すと、DOM を変更せずにスクロールバーが表示されるため、この問題が NanoScroller に起因するとは思えません。
ありがとう、ヒルニウス
__ _ _答え
最後に私は解決策を見つけました。疑問に思う方は、$timeout サービスを使用する必要があります。そのように:
myApp.directive('postRender',['$timeout', function (timer) {
return {
link: function (scope, elem, attrs, ctrl) {
timer(function () {
jQuery('.nano').nanoScroller({preventPageScrolling: true})
}
, 0);
}
}
}]);
解決策を見つけましたが、そこにあった問題をまだ認識していません。angularディレクティブがDOMが完全に変更されるのを待っていなかったためだと思います。おそらく時間の問題があったのでしょう。