Размещение директивы ng-app (html vs body)

Недавно я рассмотрел код для webapp, построенный с помощью angular, и обнаружил, что он был написан с помощью директивы ng-app="myModule", помещенной в тег <body>. Изучая angular, я только когда-либо видел его в теге <html>, как рекомендовано angular docs здесь, здесь и в tutorial.

Я изучил это немного самостоятельно и нашел SO вопросы, особенно этот и аналогично этот, которые обсуждают загрузку нескольких модулей для страницы. Однако этот метод отличается от моего случая, поскольку он включает размещение ng-app в элементах внутри тела и использование ручной начальной загрузки для одновременного запуска двух приложений angular.

Насколько я могу судить, во время выполнения между приложением с ng-app на <html> или <body> нет разницы. Как я понимаю, ng-app обозначает корень приложения angular, поэтому размещение его в <body> сократит область <head> из angular, но я не могу представить, каким образом это повлияет на вещи. Поэтому мой вопрос: какова техническая разница между размещением ng-app на одном из этих тегов вместо другого?

Ответ 1

Нет большой разницы, когда вы помещаете ng-app.

Если вы положите его на <body>, тогда у вас будет меньше возможностей для AngularJS, который быстрее слегка.

Но я использовал ng-app в <html> для управления <title>.

Ответ 2

Я был в команде, работающей над устаревшим приложением, и нашел, что лучше использовать тег ng-app в div, который используется как оболочка, чтобы изолировать новый код от устаревшего кода.

Мы обнаружили это при работе над приложением, которое в значительной степени полагалось на jqGrid и Dojo.

Когда мы добавили ng-app в заголовок, он взорвал сайт, но когда мы использовали обертку, мы могли бы без проблем использовать Angular.

Ответ 3

AngularJS загрузит первое ng-приложение, которое он найдет! Это. Если у вас более одного ng-приложения, он обрабатывает только первый. Если вы хотите перезагрузить любой другой элемент, используйте angular.bootstrap()

Значение атрибута ng-app - это модуль, который был создан с помощью:

angular.module("module_name", [])

Модуль определяет, как angular будет загружаться, потому что у нас нет метода main(), в отличие от других языков программирования. Если значение ng-app пустое, то по умолчанию используется 'ng' - модуль по умолчанию.

Было сказано, что он немного быстрее, потому что angular будет обрабатывать все элементы внутри элемента, где было ng-app. Но я немного сомневаюсь, потому что разница будет едва заметной вообще, если у вас очень громоздкий DOM.

Если вам нужны примеры здесь: http://noypi-linux.blogspot.com/2014/07/angularjs-tutorials-understanding.html