为什么ng-app不是ng-module?

时间:2013-11-12 16:49:32

标签: javascript angularjs

我知道ng-app在AngularJS中初始化模块如下:

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

但是,当我向刚接触AngularJS的人教导或观看视频时,教师不可避免地会因应用程序和模块之间的术语不一致而摸索。 AngularJS被认为是一个框架,我很惊讶它没有变成:

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

OR

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

有没有人一直关注这个项目,知道这个框架的历史?

3 个答案:

答案 0 :(得分:13)

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

我认为他在问为什么那些创造了角度名称的人ng-app。为什么他们没有命名ng-moduleng-module会更容易理解。

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

我倾向于同意克雷格。这就是说如果我去猜测他们为什么命名它ng-app我会认为它是因为你只允许在你的HTML中有一个ng-app指令。如果您希望将多个模块与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: Getting around ngApp limitations with ngModule

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

ng-app定义应用程序的mainbootstrap模块,该模块应执行应用程序的初始化任务。在某些情况下,您可能希望确定应用程序的主要模块应该是什么。就像在java中一样,你有很多方法和类,但你定义了一个main方法作为起点。类似地,在角度上你有很多模块,但是,你定义一个模块作为应用的起点。