本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化。

  Angular <script> Tag


下面通过一小段代码来介绍推荐的自动初始化过程:

<!doctype html>
<html xmlns:ng="http://angularjs.org" ng-app>
<body>
...
<script src="angular.js">
</body>
</html>
  • 把script标签放在页面的底部可以缩短应用加载的时间,因为这样的话Html的加载不会被angular.js脚本的加载阻塞。
  • angular-[version].js是具有可读性的版本,适用于开发和调试。
  • angular-[version].min.js是压缩和混淆后的版本,适用于产品代码。
  • 如果你想让angular自动初始化的话,可以在<html>标签中加上ng-app
    <html ng-app>

    </html>
  • 如果要支持IE7的话需要加上id="ng-app"
    <html id="ng-app" ng-app>

    </html>
  • 如果要使用旧版的指令语法(ng:)的话,要支持IE还需要在<html>标签中引入xml的命名空间(因为一些历史原因,现在已经不推荐使用ng:的语法了)
    <html xmlns:ng="http://angularjs.org">

    </html>

  自动初始化(Automatic Initialization)


在DOMContentLoaded事件触发时Angular会执行自动初始化过程。这时,Angular会查找ng-app指令,并用它来标明整个应用的根作用域。如果找到了ng-app指令,Angular会做一下几件事:

  • 加载和指令(directive)内容相关的模块(module)
  • 创建一个应用“注入器”(injector)
  • 将含有ng-app指令的节点作为根节点来编译DOM。这样一来,你可以只指定一部分DOM作为Angular应用。

  手动初始化(Manual Initialization)


如果你想更多的来控制初始化的过程,你可以手动的执行引导程序。比如你需要用到脚本加载器(script loader)或者要在Angular编译页面之前加入一些操作的话,你就需要手动的调用Angular的初始化方法了。例如:

<!doctype html>
<html xmlns:ng="http://angularjs.org”>
<body>
Hello{{'World'}}!
<script src="http://code.angularjs.org/angular.js"></script>
<script>
angular.element(document).ready(function(){
        angular.module('myApp',[]);
angular.bootstrap(document,['myApp']);
});
</script>
</body>
</html> 

     注意:angular.bootstrap函数签名如下:

参数 类型 说明
element Element 作为Angular应用根作用域的DOM元素
modules
(optional)
Array<String|Function|Array> 数组中为所有需要加载的模块的的名称,每个模块的名字需要在此之前定义,Angular不会在运行到这里时自己去定义模块。

如果手动调用初始化函数的话,代码的书写需要遵循以下顺序:

  • 等到页面加载完成后,找到AngularJS的根元素(通常是文档的根元素)。
  • 调用angular.bootstrap函数将模板编译成可以执行的、数据双向绑定的应用程序。

     延迟引导(Deferred Bootstrap)


这个特性使得像Batarang这样的工具和一些test runner能够在Angular的引导过程中建立钩子,在注册需要注入的依赖的时候可以增加或者替换注入的service,或者mock一些比较重的依赖。当angular.bootstrap被调用时如果window.name中包含前缀NG_DEFER_BOOTSTRAP!,引导过程将会被暂停直到angular.resumeBootstrap()被调用。angular.resumeBootstrap()可以传入一个可选的模块数组作为参数,这个数组中的模块会被加到引导函数的模块数组中一起被初始化。

=============Angular  JS学习笔记系列=============

  1. AngularJS学习笔记1——什么是AngularJS?
  2. AngularJS学习笔记2——AngularJS的初始化

=========================================

AngularJS学习笔记2——AngularJS的初始化的更多相关文章

  1. AngularJS学习笔记二:AngularJS指令

    AngularJS 指令: AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. 几个常用 指令: ng-app 指令 ...

  2. 【AngularJS学习笔记】AngularJS表单验证

    AngularJS表单验证 AngularJS提供了一些自带的验证属性 1.novalidate:添加到HTML的表单属性中,用于禁用浏览器默认的验证. 2.$dirty   表单有填写记录 3.$v ...

  3. AngularJS学习笔记(1) - AngularJS入门

    什么是AngularJS? AngularJS是建立在jQuery的一个轻量级版本之上的MVC框架.MVC将业务逻辑代码和视图.模型相分离.AngularJS提供的所有功能都可以通过使用JavaScr ...

  4. AngularJS学习笔记3——AngularJS的工作原理

    个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...

  5. AngularJs学习笔记--directive

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...

  6. AngularJs学习笔记--bootstrap

    AngularJs学习笔记系列第一篇,希望我可以坚持写下去.本文内容主要来自 http://docs.angularjs.org/guide/ 文档的内容,但也加入些许自己的理解与尝试结果. 一.总括 ...

  7. AngularJs学习笔记--Using $location

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/dev_guide.services.$location 一.What does it do? $loc ...

  8. AngularJs学习笔记--Modules

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/module 一.什么是Module? 很多应用都有一个用于初始化.加载(wires是这个意思吗?)和启 ...

  9. AngularJs学习笔记--Dependency Injection(DI,依赖注入)

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/di 一.Dependency Injection(依赖注入) 依赖注入(DI)是一个软件设计模式,处理 ...

随机推荐

  1. iOS 进阶 第十八天(0423)

    0423 - GCD( Grand Central Dispatch) block复习 请问,图中输出结果是多少?为什么? 答:结果是10.因为在定义block的时候,block会把它前面的要用到的变 ...

  2. P1912: [Apio2010]patrol 巡逻

    这道题讨论了好久,一直想不明白,如果按传统的随便某一个点出发找最长链,再回头,K=2 的时候赋了-1就没法用这种方法找最长链了,于是乎,更强的找最长链的方法就来了..类似于DP的东西吧.先上代码: ; ...

  3. 推荐一款系统软件:Unity tweak tool

    功能很多慢慢体会 在软件中心搜索unity tweak tool安装

  4. 多种方法实现H5网页图片动画效果;

    在web开发中,GIF动画效果是随处可见,比如常见的loading加载.人物奔跑的gif图片等等,那么这些都是怎么实现的呢?其实实现的原理很简单,简而言之,这些所谓的动画都是一帧一帧的图片经过一段时间 ...

  5. 我给女朋友讲编程html系列(1) -- Html快速入门

    Html是一门编写网页的语言. 在我学习Html的时候,网上的很多朋友说,直接使用[记事本]编写就行了,最后保存为后缀名为 .html 的文件. 不过,我建议你用[Nodepad++]来编写网页,用这 ...

  6. VIMTUTOR《VIM教程》

    =============================================================================== =      欢     迎     阅 ...

  7. jquery实现select下拉框可输入+联想关联option

    下面代码摘自http://www.oschina.net/question/96791_12832 <script language="javascript" src=&qu ...

  8. [转]Eclipse遇到的常见问题

    1.  提示:“Setting build path” has encountered a problem,Could not write file D:\\workspace\demo\.class ...

  9. 【BZOJ】【1874】取石子游戏

    SG函数 嗯博弈论入门题,关于SG函数这个东西可以去看VFK神犇的博客,讲的非常清楚Orz. 传送门:vfleaking.blog.163.com/blog/static/17480763420123 ...

  10. 剑指offer--7题

    *题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. *句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. *例如输入“I am a student.”,则输出“st ...