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