Какой метод следует использовать для ручной загрузки моего AngularJS?
Я видел следующее:
angular.bootstrap(document, ['TodoApp']); angular.bootstrap(angular.element("body")[0], ['TodoApp']);
В документации AngularJS упоминается это, чего я не понимаю.
angular.element(document).ready(function() { angular.bootstrap(document); });
Есть ли разница между этими методами? В частности, каков последний метод из Угловых документов? Можно ли лучше использовать, чем другой?
- угловой $ q, Как связать несколько обещаний внутри и после цикла
- Как интегрировать флот с AngularJS?
- Как настроить IIS для URL-адреса Переписывание приложения AngularJS в режиме HTML5?
- Как установить фокус на поле ввода?
- если путь ngSrc разрешается до 404, существует ли способ отступить к умолчанию?
- Угловая директива, как добавить атрибут к элементу?
- AngularJS: как реализовать простую загрузку файла с помощью многострочной формы?
- Ошибка: Достигнуто 10 $ digest () итераций. Aborting! с динамическим сортировочным предикатом
- localStorage vs sessionStorage vs cookie
- Rails CSRF Protection + Angular.js: protect_from_forgery заставляет меня выйти на POST
- Какова наилучшая практика для вызова AJAX в Angular.js?
- Angularjs $ http.get (), а затем привязка к списку
- Реализация загрузчика с использованием httpInterceptor и AngularJS 1.1.5
Они примерно одинаковы, с несколькими отличиями:
angular.bootstrap(document, ['TodoApp']);
Это будет работать, если ваши сценарии загружены в конце страницы (а не в заголовке).
В противном случае DOM не будет загружаться во время загрузки приложения (не будет никакого шаблона, который будет скомпилирован, директивы не будут иметь никакого эффекта).
Это работает: plnkr
Этого нет: plnkr
angular.bootstrap(angular.element("body")[0], ['TodoApp']);
То же, что и раньше, используя body
в качестве корня приложения. Он использует селектор, который недоступен в jqLite, поэтому вам нужно иметь полный jQuery, включенный в приложение.
Я не уверен, в чем преимущество использования body
вместо document
, но, вероятно, имеет какое-то отношение к тестированию e2e , как объясняется в этом комментарии
plknr
angular.element(document).ready(function() { angular.bootstrap(document); });
На самом деле это ожидает, что DOM будет загружен, поэтому он будет работать, даже если вы включите свои скрипты в заголовок.
Это в основном то же самое, что и $(document).ready(
jQuery $(document).ready(
но с использованием jqLite
angular.element
.
В последнем примере, никакие модули не передаются в функцию начальной загрузки, скорее всего, вам нужно будет объявить ваш основной модуль, если только ваше приложение не состоит только из controllerов в глобальном пространстве имен.
Таким образом, последний вариант будет похож на следующий, чтобы быть похожим на два других:
angular.element(document).ready(function() { angular.bootstrap(document, ['TodoApp']); });
plknr
Я предполагаю, что большую часть времени самая безопасная ставка использует этот последний подход.