У меня есть две директивы - родительский и дочерний в родительском директивном контроллере, у меня есть этот код
$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() - директивы child выполняется, из-за чего val.moreData выходит неопределенным, поскольку данные еще не получены из сделанного вызова.
Вам необходимо обработать данные после завершения обещания getData(). Вместо этого получите доступ к данным из области действия. Попробуйте цепи обещаний, возвращая новые значения для следующего вызова then
.
Например, getData
и return 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>