コントローラで定義されているスコープ変数$scope.first_unread_idがあります。私のテンプレートには、次のものがあります。
<div id="items" >
<ul class="standard-list">
<li ng-repeat="item in items" scroll-to-id="first_unread_id">
<span class="content">{{ item.content }}</span>
</li>
</ul>
</div>
私のディレクティブは次のようになります。
angular.module('ScrollToId', []).
directive('scrollToId', function () {
return function (scope, element, attributes) {
var id = scope.$parent[attributes["scrollToId"]];
if (id === scope.item.id) {
setTimeout(function () {
window.scrollTo(0, element[0].offsetTop - 100)
}, 20);
}
}
});
ただし、機能します。2つの質問があります。
「first_unread_id」をコントローラースコープから直接スコープに取り込むより良い方法はありますか。$parent?これは少し「厄介」のようです。私はそれを、これまでのli要素で繰り返す必要のないパラメーターとして、ビューを介して直接に渡すことができることを望んでいました。
setTimeout()呼び出しの必要性を回避するためのより良い方法はありますか?それがないと、時々動作します-レイアウトのタイミングの違いのために想像します。私が使用した構文がリンク関数を定義していることは理解していますが、それがデフォルトでプレリンクなのかポストリンクなのか、そしてそれが私の問題にとって重要なのかどうかはわかりません。