Dyrektywa AngularJS, aby przewinąć do danego elementu

Mam zmienną zasięgu $ scope.first_unread_id, która jest zdefiniowana w moim kontrolerze. W moim szablonie mam:

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

a moja dyrektywa wygląda tak:

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

});

działa jednak dwa pytania:

Czy istnieje lepszy sposób na uzyskanie „first_unread_id” z zakresu kontrolera do bezpośredniego niż zasięg zapytania. $ Parent? To wydaje się trochę „obrzydliwe”. Miałem nadzieję, że uda mi się przekazać to przez widok bezpośrednio jako parametr bez konieczności powtarzania tego na elemencie li li.

Czy istnieje lepszy sposób na uniknięcie potrzeby wywołania funkcji setTimeout ()? Bez tego działaczasami - Wyobrażam sobie z powodu różnic w rozkładzie czasu. Rozumiem, że składnia, której użyłem, to zdefiniowanie funkcji łącza - ale nie jest dla mnie jasne, czy domyślnie jest to link wstępny czy końcowy - a jeśli to ma znaczenie dla mojego problemu.

questionAnswers(7)

yourAnswerToTheQuestion