angularjs命名参数

mnxm 2016-12-26 12:16:27
请比较以下两段代码

// 定义一个模块
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函数的参数只与顺序有关系,与变量名没关系
//请问这是怎么实现的??
});

...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mnxm 2016-12-26
  • 打赏
  • 举报
回复
重发下

// 定义一个模块
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函数的参数只与顺序有关系,与变量名没关系
//请问这是怎么实现的??
});
mnxm 2016-12-26
  • 打赏
  • 举报
回复
原来如此 十分感谢
functionsub 2016-12-26
  • 打赏
  • 举报
回复
mainApp.controller('CalcController', ['$scope','CalcService','defaultInput2','defaultInput',function($scope, CalcService,defaultInput2, defaultInput) {
}]);
上面第二种写法,前面的依赖项要加引号,上面笔误。 另外,强烈建议不要使用第一种方案,虽然你写的时候省事了,最后如果代码需要压缩的话,第一种写法里,函数的参数名都会被压缩成a,b,c,最后的结果就是你的代码完全跑不起来。
functionsub 2016-12-26
  • 打赏
  • 举报
回复
angularjs里面控制器,指令等的定义都是通过依赖注入来实现的,
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); // 执行
  }
}

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧