我有一个在我的控制器中定义的范围变量 $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);
}
}
});
但是,它可以解决两个问题:
有没有更好的方法将“first_unread_id”从控制器范围中获取到直接而不是询问范围。$ parent?这似乎有点“恶心”。我希望我可以通过视图将其作为参数传递给直接,而不必在任何 li 元素上重复该参数。
有没有更好的方法来避免 setTimeout() 调用的需要?没有它,它有时会起作用- 我想是由于布局时间的不同。我了解我使用的语法是定义一个链接函数——但我不清楚这是默认情况下的前置链接还是后置链接——以及这是否对我的问题很重要。