我们说我的animals.json
文件包含以下内容:
{
"animals": {
"elephant": {
"size": "large"
},
"mouse": {
"size": "small"
}
}
}
我将这些数据添加到我的控制器范围内:
animalsApp.controller('animalsCtrl', function($scope, $http){
$http.get('../../animals.json').success(function(data){
$scope.animals = data.animals;
});
});
哪种方法很完美,但是我要说我需要从我需要添加到$ scope.animals的API中获取一些数据,其中包含以下数据:
{
"animal_name": "Leonardo"
}
当我使用jsons数据转到api时会返回:
http://api.someapi.com/animals/{animals.elepahant} // returns above json
假装{animals.elaphant}
是我在循环json时获得的结果,从中获取值,并从远程api获取数据,查询是mines的变量,将结果添加到我的json并返回$ scope.animals中的新修改过的json。
所以最终的json看起来像是:
{
"animals": {
"elephant": {
"size": "large",
"name": "Leonardo"
},
"mouse": {
"size": "small",
"name": "Vader"
}
}
}
我怎样才能做到这一点?
答案 0 :(得分:1)
通常你会有一个animals
数组并循环遍历该数组。
由于你有一个对象,原则是相同的。使用closure
进行循环非常重要。将使用angular.forEach()
来创建该闭包。
使用for
循环本身不会创建闭包,并且可能会有问题,因为循环在返回请求响应之前很久就完成了
$http.get('../../animals.json').success(function(data){
$scope.animals = data.animals;
angular.forEach(data.animals, function(v, animal_type){
var url = 'http://api.someapi.com/animals/' + animal_type;
$http.get(url).success(function(resp){
v.name = resp.animal_name;
});
});
});
还有其他方法可以使用链式承诺来编写它。 我现在保持简单