ByKraB
@ByKraB

Angular. Как узнать, когда содержимое переменной закончило отрисовку в DOM?

Приветствую.

Есть приложение на Angular.

С сервера получается текст, помещается в переменную $scope.variable и выводится на страничку {{variable}}

После вывода текста, срабатывает скрипт, который создает кастомную прокрутку. Для этого скрипта важна высота элемента, в который помещен текст.

Проблема в том, что текст с сервера может иметь разные размеры. От пары строчек текста до десятка печатных страниц.
Сейчас скрипт для прокрутки срабатывает по таймауту. Т.е получены данные с сервера, через 200mc вызывается скрипт прокрутки. Но из-за того, что текст может быть очень большой, этого времени не всегда хватает. Текст не успевает отрисоваться до конца, в результате высота контейнера с текстом неверная и результат получается неверный.

Можно ли как-то отследить конец отрисовки, чтобы сразу после этого вызвать скрипт для прокрутки?

P.S Вариант с увеличением времени таймаута не предлагать. Это не подходит.

Спасибо.
  • Вопрос задан
  • 2759 просмотров
Пригласить эксперта
Ответы на вопрос 2
benbor
@benbor
Помог ответ - не забудь лайкнуть
Ну вообще, у вас неправильный подход . Вы пытаетесь писать в стиле JQuery. Вешаете watch на высоту вашего блока, и как только она меняется, двигаете страницу. Так как $watch отрабатывает при объявлении тоже, то первый раз у вас вызовется что-то типа "сделай скрол на 0px", но когда контент заполнится, $watch выполнится снова "сделай скрол на 200px". Вот похожая задача
stackoverflow.com/questions/19048985/angularjs-bet...
Ответ написан
AMar4enko
@AMar4enko
А не пробовали просто $timeout(/**/, 0) сделать?
Вам нужно из текущего $digest-цикла выйти перед тем, опросить высоту.
Ответ написан
Ваш ответ на вопрос

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

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