Директива о связи между родителями и детьми

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

Теги:

1 ответ

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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню