21

我知道 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">

有没有人关注这个项目足够长的时间来了解框架这一部分的历史?

4

3 回答 3

13

我不认为克雷格在问它ng-app做什么或它是如何工作的。

我想他是在问为什么创建 angular 的人将这个指令命名为ng-app。他们为什么不给它命名ng-moduleng-module会更容易理解。

例如ng-controller应该命名一个控制器,ng-module应该命名一个模块。angular创建它们的方法被命名为module()and controller(),没有称为“app”的方法或实体。

我倾向于同意克雷格的观点。也就是说,如果我去推测他们为什么命名它,ng-app我会认为这是因为您只允许ng-app在 HTML 中有一个指令。如果您希望有多个模块与您的 HTML 页面相关联,您可以通过编程方式来实现。

因此ng-app,它更像是一个用模块引导 HTML 的实用程序,它不是将模块与 HTML 关联起来的通用方法。

如果您查看它所建议的文档:

使用此指令自动引导 AngularJS 应用程序。ngApp 指令指定应用程序的根元素并且通常放置在页面的根元素附近——例如在或标记上。

每个 HTML 文档只能自动引导一个 AngularJS 应用程序。在文档中找到的第一个 ngApp 将用于定义根元素以自动引导为应用程序。要在 HTML 文档中运行多个应用程序,您必须使用 angular.bootstrap 手动引导它们。AngularJS 应用程序不能相互嵌套。

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

所有这一切,如果你想要一个ng-module指令,你总是可以编写自己的指令来包装angular.bootstrap()函数。您可以在我写的一篇博客文章中找到有关如何执行此操作的更多详细信息和代码:AngularJS:使用 ngModule 解决 ngApp 限制

于 2014-04-04T14:44:47.760 回答
7

ng-app表示:该页面中有 Angular!

ng-app="module"表示:该页面中有 Angular,并且在该模块中定义了必要的控件/服务/等。

于 2013-11-12T16:58:25.887 回答
4

ng-app定义应用程序的mainorbootstrap模块,它应该执行应用程序的初始化任务。在某些情况下,您可能想在运行时决定哪个应该是应用程序的主模块。就像在 java 中一样,您有许多方法和类,但您定义一个main方法作为起点。同样,在 Angular 中,您有许多模块,但是,您将一个模块定义为应用程序的起点。

于 2013-11-12T17:31:04.200 回答