父母和子女指令沟通问题

时间:2015-09-27 19:24:43

标签: javascript angularjs

我有两个指令 - 父母和孩子 在父指令控制器中我有这个特定的代码

$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指令。

1 个答案:

答案 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>