87,915
社区成员
发帖
与我相关
我的任务
分享
// 定义一个模块
var mainApp = angular.module("mainApp", []);
// 创建 value 对象 "defaultInput" 并传递数据
mainApp.value("defaultInput", 5);
mainApp.value("defaultInput2", 6);
mainApp.controller('CalcController', function($scope, CalcService, defaultInput, defaultInput2) {
//defaultInput is 5
//defaultInput2 is 6
});
// 定义一个模块
var mainApp = angular.module("mainApp", []);
// 创建 value 对象 "defaultInput" 并传递数据
mainApp.value("defaultInput", 5);
mainApp.value("defaultInput2", 6);
mainApp.controller('CalcController', function($scope, CalcService, defaultInput2, defaultInput) {
//defaultInput is 5
//defaultInput2 is 6
//与前面保持一致,而我所熟知的js函数的参数只与顺序有关系,与变量名没关系
//请问这是怎么实现的??
});
// 定义一个模块
var mainApp = angular.module("mainApp", []);
// 创建 value 对象 "defaultInput" 并传递数据
mainApp.value("defaultInput", 5);
mainApp.value("defaultInput2", 6);
mainApp.controller('CalcController', function($scope, CalcService, defaultInput, defaultInput2) {
//defaultInput is 5
//defaultInput2 is 6
});
// 定义一个模块
var mainApp = angular.module("mainApp", []);
// 创建 value 对象 "defaultInput" 并传递数据
mainApp.value("defaultInput", 5);
mainApp.value("defaultInput2", 6);
mainApp.controller('CalcController', function($scope, CalcService,defaultInput2, defaultInput) {
//defaultInput is 5
//defaultInput2 is 6
//与前面保持一致,而我所熟知的js函数的参数只与顺序有关系,与变量名没关系
//请问这是怎么实现的??
});
mainApp.controller('CalcController', ['$scope','CalcService','defaultInput2','defaultInput',function($scope, CalcService,defaultInput2, defaultInput) {
}]);
上面第二种写法,前面的依赖项要加引号,上面笔误。
另外,强烈建议不要使用第一种方案,虽然你写的时候省事了,最后如果代码需要压缩的话,第一种写法里,函数的参数名都会被压缩成a,b,c,最后的结果就是你的代码完全跑不起来。mainApp.controller('CalcController', function($scope, CalcService,defaultInput2, defaultInput) {
});
上面这样的写法,第二个参数你看着是一个function,实际在contoller这个方法里,他是解析了这个function的所有形参名称,最后然后将这些依赖转换成实参去执行。
mainApp.controller('CalcController', [$scope,CalcService,defaultInput2,defaultInput,function($scope, CalcService,defaultInput2, defaultInput) {
}]);
上面这样的写法参数顺序就必须跟数组里的参数顺序一致了。
下面是我写的一个小例子,模拟这样的情况,当然,angularjs里的实际逻辑比我这个复杂很多。
var obj = {
v1 : 1, v2 : 2
};
var reg = /function\s*\(([^)]*)\)\s*\{\n/;
var tirmReg = /(^\s*)|(\s*$)/g;
var test = {
controller : function(name){
var args = arguments[1];
var depends;
var factory;
if(typeof args == 'function'){
var str = args.toString(); // 解析依赖项
var dependStr = str.match(reg);
if(dependStr){
dependStr = dependStr[1];
if(dependStr){
depends = dependStr.split(',');
}
}
factory = args;
}else{
factory = args.pop();
depends = args;
}
var realDepends = [];
for(var i=0;i<depends.length;i++){
var dependName = depends[i];
dependName = dependName.replace(tirmReg,'');
realDepends.push(obj[dependName]);// 组装依赖实参列表
}
factory.apply(undefined,realDepends); // 执行
}
}