我有两个指令 - 父母和孩子 在父指令控制器中我有这个特定的代码
$scope.someRandomFunction = function(){
someService.getSomeRandomData().then(function (data) {
$scope.dataForSomething = [];
data.forEach(function(value) {
var obj= {};
obj.id = value.id
obj.name = value.name;
obj.moreData = [];
$scope.dataForSomething.push(obj);
});
getData();
});
};
function getData(){
sharedService.getSomething(opts).then(function (data) {
//i'm putting some data in obj.moreData from the data that i get here
});
}
在我看来,我有
<parent-directive>
<div ng-repeat="val in dataForSomething">
<track val="val"></track>
</div>
</parent-directive>
问题出在我从getData()获取数据之前 - 由于数据尚未来自调用而未执行val.moreData,因此执行了child指令。
答案 0 :(得分:0)
您需要在getData()promise完成后处理数据。而是从范围访问数据。尝试通过为then
的下一次调用返回新值来链接承诺。
例如,getData
并返回innerData
。
$scope.someRandomFunction = function(){
someService.getSomeRandomData().then(function (outerData) {
$scope.dataForSomething = [];
getData(outerData).then(function(innerData){
outerData.forEach(function(value) {
var obj= {};
obj.id = value.id
obj.name = value.name;
obj.moreData = [];
// array is updated after everything is ready.
$scope.dataForSomething.push(obj);
});
});
});
};
function getData(){
return sharedService.getSomething(opts).then(function (data) {
// do stuff with data, and then return it
return data; // <-- turns into innerData var
});
}
<parent-directive>
<div ng-repeat="val in dataForSomething">
<track val="val"></track>
</div>
</parent-directive>