私は AngularJS を初めて使用し、jQuery カスタム コンテンツ スクローラーをアプリケーションに実装する際に問題に対処しています。
Angular でコンテンツを更新するときに、スクローラーを更新する必要があります。このため、スクローラーにはupdate
メソッドがあります。私の問題は、どこに電話すればよいかわからないことです。コンテンツのマークアップは次のとおりです。
<div class="scroll-list nice-scrollbars">
<ul class="gallery clearfix">
<li class="extra-alt" ng-repeat="item in relatedItems.data">
...
</li>
</ul>
</div>
Angular の成功ブランチで更新メソッドを呼び出そうとしました$http.post
:
$scope.relatedItems = $http.post($scope.url, {
'filterType': 'related', 'film': id
}).success(function() {
$(".nice-scrollbars").mCustomScrollbar('update');
});
これは機能しませんでした。成功メソッドが呼び出されたときに、ビューのコンテンツがまだ更新されていないためだと思います(alert
関数を使用して表示でき、ダイアログボックスを閉じた後にデータが表示されました)
スクロールバーを機能させることができた唯一の方法は、スクロールバーの高度なプロパティを使用してコンテンツの変更を監視することでした (これらはスクロールバーに渡されるオプションです)。
var scrollbarOpts = {
scrollButtons:{
enable:true
},
advanced:{
updateOnContentResize: true
//@TODO: get rid of this, correctly find where to call update method
}
}
このオプションはスクリプト全体のパフォーマンスを低下させるため、これは悪い習慣です。 必要に応じてDOMを更新するために必要なjQueryメソッドを呼び出す正しい場所はどこですか、または変更を表示するためのそのようなバインディングはAngularJSでどのように正しく行われますか?