使用AngularJS添加到json对象中

时间:2015-05-10 01:42:41

标签: javascript json angularjs xmlhttprequest

我们说我的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"
    }
  }
}

我怎样才能做到这一点?

1 个答案:

答案 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;
       });
    });
});

还有其他方法可以使用链式承诺来编写它。 我现在保持简单