我是棱角分明的新人,一直在努力解决我的问题。
我需要多次访问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
答案 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