2015-09-27 52 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並返回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>