У меня есть переменная scope $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? Это кажется немного "icky". Я надеялся, что смогу передать это через представление прямому параметру без необходимости повторять это на элементе li.
-
Есть ли лучший способ избежать необходимости вызова setTimeout()? Без него он работает иногда - я думаю, из-за разницы в сроках макета. Я понимаю, что синтаксис, который я использовал, определяет функцию ссылки, но мне не ясно, является ли это предварительной или пост-ссылкой по умолчанию, - и если это даже имеет значение для моей проблемы.