Подтвердить что ты не робот

Почему ng-app не ng-модуль?

Я понимаю, что ng-app инициализирует модуль в AngularJS следующим образом:

var app = angular.module('myApp', []);
<html ng-app="myApp">

Но когда я учу это кому-то новому для AngularJS или смотрю видео, инструкторы неизбежно борются за несогласованность терминологии между приложением и модулем. AngularJS настолько хорошо продумана, что я рад, что он не изменился:

var app = angular.app('myApp', []);
<html ng-app="myApp">

ИЛИ

var app = angular.module('myModule', []);
<html ng-module="myModule">

Кто-нибудь следовал проекту достаточно долго, чтобы узнать историю на этой части рамки?

4b9b3361

Ответ 1

Я не думаю, что Крейг спрашивает, что делает ng-app или как это работает.

Я думаю, он спрашивает, почему люди, которые создали angular, называют эту директиву ng-app. Почему они не назвали его ng-module. ng-module было бы легче понять.

Например, ng-controller должен назвать контроллер, ng-module должен назвать модуль. Методы angular для их создания называются module() и controller(), нет метода или объекта под названием "приложение".

Я склонен согласиться с Крейгом. Тем не менее, если бы я подумал, почему они назвали его ng-app, я бы подумал, потому что вам разрешено иметь только одну директиву ng-app в вашем HTML. Если вы хотите иметь более одного модуля, связанного с вашей HTML-страницей, вы можете сделать это программно.

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

Если вы посмотрите на документацию, что она предлагает:

Используйте эту директиву для автоматической загрузки приложения AngularJS. Директива ngApp обозначает корневой элемент приложения и обычно помещается около корневого элемента страницы - например, на  или теги.

Только одно приложение AngularJS может быть автоматически загружено на каждый HTML-код документ. Первый ngApp, найденный в документе, будет использоваться для определения корневой элемент для автоматической загрузки в качестве приложения. Чтобы запустить несколько приложения в документе HTML, вы должны вручную загрузить их используя вместо этого angular.bootstrap. Приложения AngularJS не могут быть вложенные друг в друга.

http://docs.angularjs.org/api/ng/directive/ngApp

Все сказанное, если вы хотите директиву ng-module, вы всегда можете написать свой собственный, чтобы обернуть функцию angular.bootstrap(). Вы можете найти более подробную информацию и код о том, как это сделать в сообщении в блоге, которое я написал об этом: AngularJS: обойти ограничения ngApp с помощью ngModule

Ответ 2

ng-app означает: на этой странице есть Angular!

ng-app="module" означает: эта страница имеет Angular, и в этом модуле определены необходимые элементы управления/службы/etc.

Ответ 3

ng-app определяет модуль main или bootstrap вашего приложения, который должен выполнять задачу инициализации вашего приложения. Может быть случай, когда во время выполнения вы хотите решить, какой должен быть основной модуль вашего приложения. Как и в java, у вас есть много методов и классов, но в качестве начальной точки вы определяете один метод main. Аналогично, в angular у вас есть много модулей, однако вы определяете один модуль как отправную точку приложения.