Open hytzgroup opened 5 years ago
var type = Object.prototype.toString;
var demoApp = angular.module('demoApp',[]);
demoApp.controller('demoCtrl',[
'$scope',
function($scope){
$scope.name = '';
}
])
var result = '',item;
for(var key in demoApp){
item = demoApp[key];
if(typeof item === 'object'&&type.call(item) === "[object Array]"){
item = '['+item.toString()+']'
}else{
item = item.toString()
}
result += (key+' : '+item+'\n')
}
console.log(result)
AngularJS模块化解析
[TOC]
概述
模块化作为前端一个重要话题,模块化主要是为了提高了代码的复用性,降低代码的可维护性。AngularJS作为一个前端框架必然无法跨越模块化。AngularJS中的模块又是什么样子的?它和namespace、闭包、amd模块、cmd模块、es6模块等前端模块有什么区别呢?
实例
从控制台打印的结果可以分析得出以下结论:
provider、factory、service、decorator、animation、filter、controller、directive都是把数据做参数化处理[provider,method,arguments],并压入invokeQueue中
value、constant做参数化处理[provider,method,arguments],并压入invokeQueue数组
config参数化处理后,压入configBlocks数组
run参数化处理后,压入runBlocks数组
arguments是_invokeQueue中的
[ "demoCtrl",//name ["$scope",function($scope){$scope.name=''}]//fn ]
API相关
configFn和生成demoApp之后调用config API是相同逻辑
总结
angularJS中module是一个类似namespace的模块化方案,provider、factory、service、decorator、animation、filter、controller、directive等都是参数化处理的工厂函数。_invokeQueue是注册 Provider, _configBlocks是配置Provider, _runBlocks执行实例,可以理解为AOP模式。