angular应用执行过程

angular 会在document上设监听函数 监听DOMContentLoaded事件。

jqLite(window.document).ready(function() {
angularInit(window.document, bootstrap);
});

所有当所有脚本执行完毕,构建好angular的module之后 。就会执行到该监听函数。
接下来会去寻找angular应用 根元素(rootElement).从指定 元素上(默认是window.document)去找ng-app属性的值作为模块的标识符,也就是模块名。
实际上这些['ng-', 'data-ng-', 'ng:', 'x-ng-']前缀 +‘app’ 都是可以的,我们这里只提ng-app.
如果在document上没找到ng-app属性,会在子孙中找,并将找到的元素作为应用(application)根元素。

找到之后就会 执行启动(bootstrap)函数

function bootstrap(element, modules, config) {
var doBootstrap = function() {
element = jqLite(element); //将element用jqlite warpped,以便操作
...
modules.unshift('ng');
var injector = createInjector(modules, config.strictDi);
injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
function bootstrapApply(scope, element, compile, injector) {
scope.$apply(function() {
element.data('$injector', injector);
compile(element)(scope);
});
}]
);
return injector;
};

知道这个的过程我们通常可以自己手动的来执行angular应用

angular.element(document).ready(function(){
angular.bootstrap(document,['myapp']);
})

代码分析 :
创建注入器injector 。并使用它来执行 编译链接rootElement的函数。
至此angular的启动流程结束。我们看到angular呈现的页面。rootElement比作身体的话,element上的响应事件构成了神经网络。让页面有了灵动。 这神经网络的灵动都在编译链接过程中赋予element的。

下章 分析injector.

posted @ 2016-10-08 17:03  _sihuanhuang  阅读(293)  评论(0)    收藏  举报