2015-09-27 22 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>