1 angularJs初始化应用模块有两种方式
1.1、绑定初始化,自动加载
通过绑定来进行angular的初始化,会把js代码侵入到html中。
ng-app是angular的一个指令,代表一个angular应用(也叫模块)。使用ng-app或ng-app=””来标记一个DOM结点,让框架会自动加载。也就是说,ng-app是可以带属性值的。如果没有ng-app指令将会报错;
自动初始化流程如下
ng-app 指令定义了 AngularJS 应用程序的 根元素
AngularJS 在 HTML DOMContentLoaded 事件后会自动引导(自动初始化)应用程序。如果找到 ng-app 指令 , AngularJS 载入指令中的模块,然后创建应用的注入器,并将 ng-app 作为应用的根进行编译。同时,启动应用的时候,会在其子元素范围内构成一个$scope;
应用的根可以是整个页面,或者页面的一小部分,如果是一小部分会更快编译和执行。
AngularJS initializes automatically upon DOMContentLoaded
event or when the angular.js
script is evaluated if at that time document.readyState
is set to 'complete'
. At this point AngularJS looks for the ngApp
directive which designates your application root. If the ngApp
directive is found then AngularJS will:
- load the module associated with the directive.
- create the application injector
- compile the DOM treating the ngApp directive as the root of the compilation. This allows you to tell it to treat only a portion of the DOM as an AngularJS application.
|
|
|
|
|
|
ng-app指令作用如下
There are a few things to keep in mind when using ngApp
:
- only one AngularJS application can be auto-bootstrapped per HTML document. The first
ngApp
found in the document will be used to define the root element to auto-bootstrap as an application. To run multiple applications in an HTML document you must manually bootstrap them usingangular.bootstrap
instead. - AngularJS applications cannot be nested within each other.
- Do not use a directive that uses transclusion on the same element as
ngApp
. This includes directives such asngIf
,ngInclude
andngView
. Doing this misplaces the app$rootElement
and the app’s injector, causing animations to stop working and making the injector inaccessible from outside the app.
You can specify an AngularJS module to be used as the root module for the application. This module will be loaded into the $injector
when the application is bootstrapped. It should contain the application code needed or have dependencies on other modules that will contain the code. See angular.module
for more information.
1.2 当同一个页面中包含多个app的时候(不能嵌套),这个时候angular就不能自动启动应用,需要我们用bootstrp手动启动应用
手动初始化一个angular应用模块,可以使用angular.bootstrap(),该方法可以初始化一个angularjs应用,注意该方法不会创建模块,我们在将模块作为参数传递之前必须先创建了一个模块或者已经先加载了一个模块
|
|
其中第一个参数element:是绑定ng-app的dom元素;
modules:绑定的模块名字
config:附加的配置
|
|
|
|
1.3 一个ng-app所在的标签就是一个angular应用,该标签下的所有子标签会被angular编译,不是其子标签的话不会被angular编译
|
|
1.4注意
ng-app和angular.bootstrap不能同时使用
ng-app只能出现一次,所以就只能出现一个angularjs应用,但是angular.bootstrap可以出现多次,但是这种做法是不推荐的
二者初始化的一个应用的时候,所在元素的不能有ngIf ngView ngInclude指令
ng-app所在的标签的就是一个angular应用,该标签下面的所有的子标签都会被angular编译,不是该标签的子标签不会被angular编译
初始化angular应用之后可以进行创建模块以及控制器、服务等其他操作
初始化的angular应用里面的表达式会被编译,编译之后的表达式会按照angular的规定进行解析,如果没有ng-app指令或者bootstrap手动初始化angular应用,则表达式不会进行运算,将直接显示出来
HTML5 允许扩展的(自制的)属性,以 data- 开头。
AngularJS 属性以 ng- 开头,但是您可以使用 data-ng- 来让网页对 HTML5 有效。AngularJS 表达式 与 JavaScript 表达式
类似于 JavaScript 表达式,AngularJS 表达式可以包含字母,操作符,变量。
与 JavaScript 表达式不同,AngularJS 表达式可以写在 HTML 中。
与 JavaScript 表达式不同,AngularJS 表达式不支持条件判断,循环及异常。
与 JavaScript 表达式不同,AngularJS 表达式支持过滤器。