Diretiva AngularJS para rolar para um determinado item

Eu tenho uma variável de escopo $ scope.first_unread_id que é definida no meu controlador. No meu modelo, tenho:

<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>

e minha diretiva parece:

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);
    }
  }

});

funciona, no entanto, duas questões:

Existe uma maneira melhor de obter o "first_unread_id" fora do escopo do controlador no escopo de interrogação direta do que $ parent? Isso parece um pouco "nojento". Eu estava esperando que eu pudesse passar isso através da visão para o direto como um parâmetro sem ter que repetir isso no elemento ever li.

Existe uma maneira melhor de evitar a necessidade da chamada setTimeout ()? Sem isso, funcionaas vezes - Eu imagino devido à diferença no tempo de layout. Entendo que a sintaxe que usei está definindo uma função de link - mas não está claro para mim se isso é um pré ou pós-link por padrão - e se isso é importante para o meu problema.

questionAnswers(7)

yourAnswerToTheQuestion