这部分讲原理部分,主要是分析angular.js的源代码,蛮有意思的,也很重要,深入理解原理,哈哈,知其然还要知其所以然,知其所以然,才能更好的知其然。
几个tips:
- $scope是个树形结构
- 看源代码——debug
- 此bootstrap非彼bootstrap
- return 语句可以放在前面
1.启动~
主要看angular.js文件的最后面
用自执行函数的形式让整个代码在加载完成后立即执行
下面是几个需要探索的:
window.angular
angular.injector
angular.module
angular.element(document)
angular.element = jqLite
window.angular.bootstrap(是否多次启动)
bindjQuery();(jqlite)
extend()
- 启动是自启动(ng-app),我们也可以通过在angular.js里面增加代码手动启动。
- 发布ng提供的API,publishExternalAPI()
- setupModuleLoader(window)——建立模块机制 注册内核provider
- angularInit()——防止多次初始化ng-app
- bootstrap——创建injector、拉起内核和启动模块,调用compile服务
2.注入
- 推断型注入(混淆之后名称都会改,就没有办法了)
- 声明式注入
- 内联式注入(推荐)
创建注射器(provider,instance)
$injector.invoke()
$injector.annotate()——分析函数参数的
function 的 toString();
核心目的:让接口和实现分离
在ng中,所有的provider都可以用来进行注入
provider/factory/service/constant/value
provider是基础,其余都是调用provider函数实现的,只是参数不同
从坐向右,灵活性越来越差