我见过两种不同的方式来启动 AngularJS:
- ng-app="TodoApp"
- angular.bootstrap(angular.element("body")[0], ["TodoApp"]);
首先有人可以告诉我这两者是否相同吗?
我还看到以下代码:
var TodoApp = angular.module('TodoApp', ['ngResource']);
在发出 angular.bootstrap 命令之前,是否必须加载上面的代码?
我见过两种不同的方式来启动 AngularJS:
首先有人可以告诉我这两者是否相同吗?
我还看到以下代码:
var TodoApp = angular.module('TodoApp', ['ngResource']);
在发出 angular.bootstrap 命令之前,是否必须加载上面的代码?
Directive* ng:app 可用于自动引导应用程序。可以在 HTML 中放置多个 ng-app 指令,但只有第一个将用于引导应用程序,而其他指令将被忽略。找到第一个指令的元素ng:app
成为 AngularJS 应用程序的“根”(这是$rootScope
附加的位置)。
[使用 ng:app ] Angular 在 DOMContentLoaded 事件时自动初始化...
*尽管ng:app
与其他指令类似地使用它,但它不是ng
模块的一部分,并且它的定义方式与其他 Angular 指令的定义方式不同。
另一方面,通过手动引导,您可以在同一页面内初始化多个不同的 Angular 应用程序。
你需要这样做的例子包括使用脚本加载器或需要在 Angular 编译页面之前执行操作。
因此,如果您想使用 RequireJS 之类的脚本加载器,那么在 RequireJS 运行器方法中,您将需要通过调用angular.bootstrap(...
.
Angular.bootstrap 命令允许您将模块依赖项指定为第二个参数。该函数的签名是:
angular.bootstrap(element[, modules]);
当您想要手动引导应用程序时,您必须在依赖项数组中指定主角度模块的名称(angular.bootstrap 调用的第二个参数):
// You define your app module:
angular.module('myApp', []);
// Then you specify your app module as a dependency to angular.bootstrap:
angular.bootstrap(element, ['myApp']);
此外,手动引导可让您在初始化 Angular 应用程序之前在 Angular 之外进行一些预处理和配置。
要回答您问题的第二部分:是的,您需要先加载并执行您的模块,然后才能在调用angular.bootstrap
.
angular.module('TodoApp', ['ngResource']);
angular.bootstrap(document, ['TodoApp']);
这两行是相同的(假设您的body
元素上有 ng-app)。
你应该按这个顺序做:
注意,在调用 bootstrap 之后你不能定义新的模块(至少现在,因为没有动态模块加载和延迟加载)。这是因为加载 AngularJS 应用程序有几个步骤 - 配置和运行。并且运行后无法运行其他模块的配置步骤。