我有一个使用Restangular访问数据库的Angularjs项目。我有三层数据(比如mydata,mysubdata,mysubsubdata),每层之间有一对多的关系。我的问题是,对于我的显示器,我需要将mysubsubdata连接到mysubdata。当我试图从数据库中获取数据时,我在编译器中投诉说我不能在循环中使用函数。这是我想要做的:
DataService.one(mydata.id).getList('mysubdata')
.then(function(data) {
var dataList = data;
for (returnedData in dataList) {
DataService.one(mydata.id).one('mysubdata',returnedData.id).getList('mysubsubdata')
.then(returnedSubData) {
dataList = angular.extend(dataList, returnedSubData);
});
}
});
我发现的所有示例都在.then函数中包含循环,或者首先尝试获得一堆承诺。我不认为这些适用。我对Angular来说还是一个新手,所以我可能会有点畏缩。也不确定延伸,但这可能是一个单独的问题。
编辑:我怀疑这应该用$ q.all来完成,但还没有掌握这个方法。
答案 0 :(得分:0)
在循环中添加then()
方法将不起作用,因为循环不等待promises被解析的简单原因。您可以使用递归方法实现此目的。
var myCustomData = null,
dataList = null,
dataListCounter = 0;
DataService.one(mydata.id).getList('mysubdata')
.then(function (data){
dataList = data;
myCustomData = mydata;
$scope.getSubSubData();
});
$scope.getSubSubData = function () {
if (dataList.length >= dataListCounter)
return;
DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata')
.then(function (returnedSubData) {
dataList = angular.extend(dataList, returnedSubData);
dataListCounter++;
$scope.getSubSubData();
});
};
请告诉我这是否有帮助!
答案 1 :(得分:0)
@Anadi Sharma的回应略有改动。
$scope.getSubSubData = function () {
if (dataList.length == dataListCounter)
return;
DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata')
.then(function (returnedSubData) {
dataList[dataListCounter].mysubsubdata = returnedSubData;
dataListCounter++;
$scope.getSubSubData();
});
};
请注意,当我显示数据以连接子数据值时,我会使用过滤器。