Я видел следующее:
angular.bootstrap(document, ['TodoApp']);
angular.bootstrap(angular.element("body")[0], ['TodoApp']);
Также в документации AngularJS упоминается это, что я действительно не понимаю.
angular.element(document).ready(function() {
angular.bootstrap(document);
});
Есть ли разница между этими методами? В частности, каков последний метод из документов Angular? Можно ли лучше использовать другой?
Ответ 1
Они примерно одинаковы, с несколькими отличиями:
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 будет загружен, поэтому он будет работать, даже если вы включите свои скрипты в заголовок.
Это в основном то же самое, что и jQuery $(document).ready(
, но с помощью jqLite
angular.element
.
В последнем примере, никакие модули не передаются в функцию начальной загрузки, скорее всего, вам нужно будет объявить ваш основной модуль, если ваше приложение не состоит только из контроллеров в глобальном пространстве имен.
Итак, последний вариант будет похож на следующий, чтобы быть похожим на два других:
angular.element(document).ready(function() {
angular.bootstrap(document, ['TodoApp']);
});
plknr
Я предполагаю, что большую часть времени самая безопасная ставка использует этот последний подход.