AngularJS - 将多个get请求收集到json数组中,然后传递给指令

时间:2014-12-25 03:42:41

标签: javascript json angularjs http get

我是棱角分明的新人,一直在努力解决我的问题。

我需要多次访问API以获取用户数据,将所有数据存储为JSON数组,并且当收集所有数据时(所有结果都作为一个数组),需要将其传递给指令,该指令将使用它来绘制可视化(例如。 d3.js-pie chart)。

$scope.allData = [];

$http.get("****link here****/students")
    .success(function (data) {
        students = data;

        for (i = 0; i < students.length; i = i + 1) {

            $http.get("**** link here ****/quest/" + students[i].id)
                .success(function (data) {
                    quest = data;

         $scope.allData.push({
                            id: quest.id,
                            value: quest.length
                        });
           }
        }

然后将其传递给指令

   <bar-chart data='allData'></bar-chart>

即使我在指令中设置了监视并且范围为&#39; =&#39;该指令获取空数组。

在我的其他代码中,当我只对json数组执行一次http get调用时,我可以轻松地将它传递给指令,并且它可以正常工作。


EDIT1:

好的,所以我现在使用前提,但仍然allData数组是0。 即使是这样的简单例子:

 $scope.allData = [];
 var promieses = [];
 for (i = 0; i < 10; i = i + 1) {

            promieses.push($http.get("***link***/student/" + students[i].id));
}

$q.all(promieses).then(function (data) {
    for (i = 0; i < data.length; i = i + 1) {
        $scope.allData.push("test");
    }
});

in html {{allData]] // 0

1 个答案:

答案 0 :(得分:2)

这是释放$q力量的好地方。您可以等待所有承诺解析,然后使用$q.all方法处理它们。它只是Combines multiple promises into a single promise that is resolved when all of the input promises are resolved.

见这个例子:

students = data;
var promises = [];
for (i = 0; i < students.length; i = i + 1) {

    promises.push($http.get("**** link here ****/quest/" + students[i].id));

}

$q.all(promises).then(function(response) {
    for (var i = 0; i < response.length; i++) {
         $scope.allData.push({
             id: response[i].data.id,
             value: response[i].data.length
         });
    }
})

在此处查看此行动:http://plnkr.co/edit/TF2pAnIkWquX1Y4aHExG?p=preview