Как отследить когда Angular отрендерил представление?

Здравствуйте! Ситуация следующая: есть необходимость производить некоторые манипуляции с dom с помощью jQuery, проблема в том, что манипуляции производятся с элементами которые рендерит Ангуляр и если инициализировать jquery скрипт сразу, то ничего не работает, тк ангуляр запаздывает с отрисовкой, поэтому приходится использовать $timeout'ы, чтобы всё происходило в правильной последовательности.
Вопрос в том, как отследить момент когда Ангуляр отрисовал все элементы и вызвать по такому событию инициализацию jq скрипта?
  • Вопрос задан
  • 878 просмотров
Пригласить эксперта
Ответы на вопрос 4
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Сделайте отдельный контроллер и view под кусок на котором jQuery нужно запускать.
В этом контроллере запускайте jQuery. В этот момент шаблон уже отрендерен.
<div ng-include="'app/someView.html'" ng-controller="someController"></div>
Ответ написан
AMar4enko
@AMar4enko
Есть недокументированная функция $scope.$$postDigest, которая регистрирует callback-функцию, которая вызовется после завершения $digest-цикла (сработает один раз, как закончится очередной $digest-цикл).
У меня обычно схема следующая:
1. Осуществилось действие, вызывающее перерисовку view (начался $digest-цикл)
2. В процессе обработки действия регистрирую функцию через $$postDigest
3. Все изменения зафиксированы в DOM, $digest-цикл закончился, функция из пункта 2 отработала - все рады
Ответ написан
Комментировать
@lega
Можете попробовать добавить в DOM ng-init="runMyFunc()", когда вызовется runMyFunc, DOM должен быть уже на месте.
Ответ написан
Комментировать
@Faliah
По-моему Директивы и их функция link созданы именно для этих вещей. Если же вы используете компоненты, то у них есть lifecycle метод $postLink()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы