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

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

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

$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
                        });
           }
        }

然后将其传递给指令as

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

即使我在指令中设置监视并且范围为’=’,指令也会变为空数组.

在我的其他代码中,当我只对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");
    }
});

在html {{allData]] // 0

最佳答案 这是释放
$q强大功能的好地方.您可以等待所有承诺解析,然后使用$q.all方法处理它们.它简单地将多个promise组合成一个promise,当所有输入promise都被解析时,它将被解析.

看这个例子:

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

点赞