angular源码学习笔记----(加载)
angular资源:
angular文档:http://docs.angularjs.org/api
angular官网:http://angularjs.org/
angular源码:https://github.com/angular/angular.js
angular下载:http://code.angularjs.org/
学习版本:
1.2.0-rc.2
流程简述:
angular初始化大致上有2部分:
1.初始化angular框架,模块等
2.解析document
1.读取angular.js脚本,执行angular框架上下文脚本
function angularInit(element, bootstrap) { //检索加载angular的dom元素列表 var elements = [element], //加载angular的dom元素 appElement, //加载的模块 module, //检索angular加载的关键字 names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], //提取angular加载模块的正则表达式 NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; //追加加载angular的dom元素 function append(element) { element && elements.push(element); } /********************************************************************** 遍历angular加载的关键字 检索分为两种方式: 1.使用document.getElementById,检索id中关键字 2.使用element.querySelectorAll,参考:http://www.w3.org/TR/selectors-api/] **********************************************************************/ forEach(names, function(name) { names[name] = true; append(document.getElementById(name)); name = name.replace(':', '\\:'); if (element.querySelectorAll) { forEach(element.querySelectorAll('.' + name), append); forEach(element.querySelectorAll('.' + name + '\\:'), append); forEach(element.querySelectorAll('[' + name + ']'), append); } }); /********************************************************************** 解析加载angular的dom元素及module 解析分为两种方式: 1.获取element.className,提取元素class属性内容,作为module名 2.获取names中存在于dom元素上的属性,提取属性内容,作为module **********************************************************************/ forEach(elements, function(element) { if (!appElement) { var className = ' ' + element.className + ' '; var match = NG_APP_CLASS_REGEXP.exec(className); if (match) { appElement = element; module = (match[2] || '').replace(/\s+/g, ','); } else { forEach(element.attributes, function(attr) { if (!appElement && names[attr.name]) { appElement = element; module = attr.value; } }); } } }); //如果存在需要加载angular的dom元素,调用bootstrap引导加载appElement,module if (appElement) { bootstrap(appElement, module ? [module] : []); }}