我正在构建一个节点/角度应用程序。我不习惯javascript。我为所有静态列表对象提供了服务。我试图使这段代码尽可能通用。我想我可以改进它。这就是我现在所拥有的(我只放了2个,但我会有更多):
function returnSolList (n, $resource) {
return $resource(n+'/', {}, {'query' : {method : 'GET', cache : true, isArray:true } });
}
mod.factory('Cities', ['$resource', function($resource) {return returnSolList('cities', $resource);}]);
mod.factory('Boites', ['$resource', function($resource) {return returnSolList('boites', $resource);}]);
我想我可以通过在列表['城市' Boites']中宣布我的服务然后循环建立工厂来做得更好。 还有我希望摆脱的$ resource中的冗余。
但我不知道该怎么做。
答案 0 :(得分:2)
您可以在数组中添加'cities', 'boites',...
并使用for
生成代码,但这有点复杂。你真的想要吗?
function returnSolList (n, $resource) {
return $resource(n+'/', {}, {'query' : {method : 'GET', cache : true, isArray:true } });
}
var names = ['Cities','Boites'];
for(var i=0; i<names.length; i++){
mod.factory(
names[i],
[
'$resource',
(function(name){
return function($resource){
return returnSolList(name, $resource);
}
})(names[i].toLowerCase())
]
);
}
复杂的部分是你需要返回一个函数,该函数在我正在改变的时候使用一个在for中使用i的变量。您需要将i传递给函数,以便将其保存在本地(在范围内)。
有关javascript闭包的更多信息:How do JavaScript closures work?
对于javascript代码缩小/加速检查Closure Compiler