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  阅读(277)  评论(0编辑  收藏  举报