2016-02-05 3 views
1

Мне хорошо известно, что манипуляция DOM принадлежит директивам, а не контроллерам, но я зависаю, будет ли просто прокрутка к элементу (с scrollTop jQuery) считаться манипуляцией DOM и/или должна быть перенесена в директиву.AngularJS - Прокрутка элемента зависит от директивы?

Моя страница динамически генерируется (с использованием Grails) и небольшой начальной загрузки выпадающий помещается на углу страницы, чтобы облегчить прокрутку к местам внутри длинного документа:

<a ng-click="scrollTo('question${ subQuestion.id}')"> 

${} заменяется с номером при отправке клиенту.

Моя scrollTo функции в моем контроллере достаточно проста и работает:

$scope.scrollTo = function(id) { 
    $('html, body').animate({ 
     scrollTop: $('#' + id).offset().top - 50 
    }, 1000); 
}; 

Я использую UI-маршрутизатор и ранее с помощью $uiViewScroll для перехода к элементу; это выглядело скорее в соответствии с углом , но мне нужно смещение 50px из-за навигационной панели, и я предпочитаю анимацию (оба они не выглядят как опция с $uiViewScroll).


Моих вопросы:

  • ли прокрутка элемента имеет дайджест последствие, как истинные манипуляции DOM?
  • Прокрутка элемента за пределами директивы плохая практика? Если да, то почему?
+1

'$ anchorScoll' имеет опцию смещения, а' $ uiViewScroll' может быть настроен на использование '$ anchorScoll' – charlietfl

ответ

1
  • скроллинга работает за пределами нормального переваривания цикла см этой темы How can I hide an element when the page is scrolled?
  • Я бы сказал, что это плохая практика, поскольку она включает в себя ссылку на элементы в DOM, но это только мне ...: -) Возможно, это может сделать тестирование контроллера немного сложнее, так как вам нужно обрабатывать $.