启动过程

步骤一

  • 用自执行函数在代码完成加载后立即执行

    function(window, document, undefined)

  • 在window上暴露一个唯一的全局对象angular,Line250
  •  /** @name angular */angular           = window.angular || (window.angular = {}),

  • 获得其它工具模块 Line 2129
    function publishExternalAPI(angular){extend(angular, {'bootstrap': bootstrap,'copy': copy,'extend': extend,'equals': equals,'element': jqLite,'forEach': forEach,'injector': createInjector,'noop': noop,'bind': bind,'toJson': toJson,'fromJson': fromJson,'identity': identity,'isUndefined': isUndefined,'isDefined': isDefined,'isString': isString,'isFunction': isFunction,'isObject': isObject,'isNumber': isNumber,'isElement': isElement,'isArray': isArray,'version': version,'isDate': isDate,'lowercase': lowercase,'uppercase': uppercase,'callbacks': {counter: 0},'$$minErr': minErr,'$$csp': csp});

  • 我们来看看angular全局对象都有什么东西

  • 接着,我们使用全局对象中的isFunction 来遍历一下angular全局对象上的属性,函数
  • 我们再来看看injector里都有什么

步骤二

  • 检查是不是多次导入Angular:window.angular.bootstrap(通过检查指定的元素上是否已经存在injector进行判断)

    if (window.angular.bootstrap) {//AngularJS is already loaded, so we can return here...console.log('WARNING: Tried to load angular more than once.');return;}

Angular 的三种启动方式
  1. 自动启动

Angular会自动的找到ng-app,将它作为启动点,自动启动

<!DOCTYPE html>
<html ng-app="myModule"><head><title>New Page</title><meta charset="utf-8" /><script type="text/javascript" src="../../vendor/bower_components/angular/angular.min.js"></script><script type="text/javascript" src="./02.boot1.js"></script>
</head><body><div ng-controller="MyCtrl"><span>{{Name}}</span></div>
</body>
</html>

 
var myModule = angular.module("myModule", []);
myModule.controller('MyCtrl', ['$scope',function($scope) {$scope.Name = "Puppet";}
]);

 
  • 方式2:手动启动

在没有ng-app的情况下,只需要在js注册一段代码即可

<body><div ng-controller="MyCtrl"><span>{{Name}}</span></div>
</body>var myModule = angular.module("myModule", []);
myModule.controller('MyCtrl', ['$scope',function($scope) {$scope.Name = "Puppet";}
]);/*** 这里要用ready函数等待文档初始化完成*/
angular.element(document).ready(function() {angular.bootstrap(document, ['myModule']);
});

  • 方式3:多个ng-app

ng中,angular的ng-app是无法嵌套使用的,在不嵌套的情况下有多个ng-app,他默认只会启动第一个ng-app,第二个第三个需要手动启动(注意,不要手动启动第一个,虽然可以运行,但会抛异常)

<body><div id="app1" ng-app="myModule1"><div ng-controller="MyCtrl"><span>{{Name}}</span></div></div><div id="app2" ng-app="myModule2"><div ng-controller="MyCtrl"><span>{{Name}}</span></div></div>
</body>/*** 第一个APP* @type {[type]}*/
var myModule1 = angular.module("myModule1", []);
myModule1.controller('MyCtrl', ['$scope',function($scope) {$scope.Name = "Puppet";}
]);
// angular.element(document).ready(function() {//     angular.bootstrap(app1, ['MyModule1']);
// });/*** 第二个APP* @type {[type]}*/
var myModule2 = angular.module("myModule2", []);
myModule2.controller('MyCtrl', ['$scope',function($scope) {$scope.Name = "Vincent";}
]);
angular.element(document).ready(function() {angular.bootstrap(app2, ['myModule2']);
});

步骤三:

  • 尝试绑定jQuery,如果发现导入了jQuery ,则使用导入的jQuery,否则,使用Angular自己封装的JQLite
bindJQuery();

转自:http://segmentfault.com/a/1190000002788586

转载于:https://www.cnblogs.com/startmyways/p/angular.html

angular启动过程分析相关推荐

  1. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介 友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅 ...

  2. OpenWrt启动过程分析+添加自启动脚本【转】

    一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...

  3. pixhawk PX4FMU和PX4IO最底层启动过程分析

    摘要: pixhawk PX4FMU和PX4IO最底层启动过程分析1.1 主处理器和协处理器的固件烧写和运行流程首先,大体了解PX4IO 与PX4FMU各自的任务.PX4IO(STM32F100)为P ...

  4. linux 重定位arm,Arm linxu启动过程分析(一)

    本文着重分析 FS2410 平台 linux-2.6.14 内核启动的详细过程,主要包括: zImage 解压缩阶段. vmlinux 启动汇编阶段. startkernel 到创建第一个进程阶段三个 ...

  5. linxu 启动过程分析

    linxu 启动过程分析 Linux启动过程如下:当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux ...

  6. 开机SystemServer到ActivityManagerService启动过程分析

    开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /*** ...

  7. AliOS Things的启动过程分析(一)

    AliOS Things的启动过程分析(一) 在本篇文章中,我们以developerkit开发板为例,介绍AliOS Things的启动过程.AliOS Things支持多种工具链进行编译链接的方式生 ...

  8. Chromium的GPU进程启动过程分析

    Chromium除了有Browser进程和Render进程,还有GPU进程.GPU进程负责Chromium的GPU操作,例如Render进程通过GPU进程离屏渲染网页,Browser进程也是通过GPU ...

  9. Android开发入门教程2-Android init 启动过程分析

    Android init 启动过程分析   分析android的启动过程,从内核之上,我们首先应该从文件系统的init开始,因为 init 是内核进入文件系统后第一个运行的程序,通常我们可以在linu ...

最新文章

  1. 【转】关于TP3.2 验证码不显示的问题
  2. 春节快乐!iPhone11 128G抱回家!
  3. java mplayer 源码_师兄写的一个JAVA播放器的源代码
  4. [WinSock]封装WSAAsyncSelect!
  5. 中北大学计算机二级负责老师,导师信息#中北大学计算机与控制工程学院研究生导师介绍#秦品乐...
  6. 洛谷 3784(bzoj 4913) [SDOI2017]遗忘的集合——多项式求ln+MTT
  7. GitHub 被微软收购后的 52 天,改版并放弃了 jQuery !
  8. 基于Linux操作系统的底层驱动技术
  9. CAD转换图片的小窍门
  10. esp8266 扫描wifi_wifi气象站
  11. 一本通1586【 例 2】数字游戏
  12. 声纹识别demo_科学网—声纹识别、说话人识别软件,SPEAKER v0.1 - 石自强的博文...
  13. sap 新增科目表_在SAP中新建会计科目
  14. 利用全加器实现7段数码管_[走近FPGA]之数码管动态显示
  15. SSE学习-一个小栗子
  16. 制作PE系统--20220202
  17. 这一次,彻底解决Java的值传递和引用传递
  18. 分析三种近场通信技术的特点及对未来近场通信技术的应用场景进行分析与预测
  19. 企业成功的秘密:成为独角兽
  20. ubuntu安装java17(学习)

热门文章

  1. 同样是软件测试工程师,为什么性能测试月薪更高?
  2. python爬取b站评论_用python 抓取B站视频评论,制作词云
  3. matlab常用误差分析绘图函数
  4. mysql存储java对象_Mysql存储java对象 | 学步园
  5. mel加载一个物体不同姿态的模型实现动画效果
  6. 高斯列元素消去法c语言,【大神在哪里】高斯-列主元消去法
  7. mysql存储过程返回hello world_Mysql存储过程 之 “Hello,World”
  8. AI学习笔记(三)特征选择与提取、边缘提取
  9. 卫星影像的AI分类与识别 线上Top1
  10. java懒汉,[Java教程]java 懒汉式