2015-09-27 2 views
0

У меня есть две директивы - родитель и ребенок в контроллере родительская директива У меня есть этот конкретный кодродитель и ребенок директива связи вопрос

$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 выходит неопределенным, поскольку данные еще не получены из сделанного вызова.

ответ

0

Вам необходимо обработать данные после завершения обещания 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> 
Смежные вопросы