Я создаю веб-приложение с помощью Angular, и я пытаюсь найти способ дождаться, пока все элементы data-ng-include
не будут оценены, и включает завершенную загрузку. Например, меню - это загружаемое представление, как и основное содержимое каждой страницы, поэтому, по крайней мере, есть два data-ng-include
, которые оцениваются и загружаются. Кроме того, в меню есть вложенный data-ng-repeat
, который создает мое меню. Мне нужен способ инициировать script ПОСЛЕ того, что все эти функции включены, и любые функции angular внутри них были загружены, а DOM ACTUALLY ready.
Есть ли какое-либо событие, которое будет запущено, когда angular закончит настройку страницы?
Реализация AnguarJS является базовой, и мы в основном используем ее для шаблонов с использованием data-ng-include. Каждая страница представляет собой представление (а не представление angular, только файл html), загружаемый через data-ng-include, с верхним и нижним колонтитулами над и под ним. Заголовок также динамически загружает глобальный вид (опять же не файл angular) html, содержащий angular.
Пока что меню - единственное, что использует AngularJS для чего угодно, кроме шаблонов. Он использует его для создания меню с использованием объекта JSON, который динамически генерируется JSP и вставлен в DOM, который возвращается с сервера.
Чтобы облегчить жизнь для фронт-парней, любые повторяющиеся функции JavaScript закодированы в модули, которые обнаруживаются при загрузке страницы и динамически загружаются с использованием атрибута data-features на элементе, который нуждается в функциональности JavaScript к которому прилагается.
Например, у вас может быть <div id="mySubMenu" data-features="subMenu"></div>
. При загрузке на страницу обнаружен каждый элемент с элементом данных, а связанный с ним модуль JS загружен, в этом случае мы будем загружать /scripts/modules/subMenu.js
.
Что мне нужно - это отложить запуск этой функции и вложение до тех пор, пока все элементы, являющиеся результатом функции include или другой функции angular, не будут доступны на странице и будут готовы к управлению, тем более что могут быть элементы с данными - атрибуты атрибутов внутри них включают.
Кто-то в другом месте упомянул о том, что поставил контроллер на тело и ничего не оставил, но:
$scope.$on('$viewContentLoaded', function() {
// Init Features Here
});
Это не сработало, поэтому я ищу другие варианты.
В итоге я решил использовать решение Theo в этом вопросе: Отправка события после завершения загрузки angular.js