2015-01-06 2 views
0

У меня есть директива, данные которой зависят от ответа API. Поскольку директива $compile запускается до того, как API будет выполнен, состояние директивы неверно.Директива инициализации, когда API завершен

Как я могу это исправить? Есть ли конфигурация для директивы, контроллера или чего-либо в AngularJs, которая сообщит элементу о том, чтобы ждать завершения API?

+0

Невозможно рассказать без примера. Какое состояние внутри директивы зависит? –

+0

Если возможно, можете ли вы разместить часть кода? – Kailas

+0

Можно ли загружать html введенного маршрута, пока API не будет выполнен? – puppeteer701

ответ

1

Одно из возможных решений - вы можете использовать директиву ng-if для создания dom, когда ваш API будет выполнен.

<your-directive ng-if="isAPIExecuted"></your-directive> 

И в обработчике успеха API,

Test.get().then(function(){ 
    $scope.isAPIExecuted = true; 
}); 

Edit:

Если вы используете UI-маршрутизатор, а затем загрузить ваш HTML, как только API выполняется, вы можете нам решить следующим образом:

.state{ 
    controller: '', 
    templateUrl: '', 
    resolve: { 
      data: function($q, $timeout){ 
       // Replace this code with your API call 

       var deferred = $q.defer(); 
       $timeout(function(){ 
        return deferred.resolve(); 
       },10000); 

       return deferred.promise; 
      } 
     } 
} 

Таким образом, он будет загружать html и контроллер только после того, как ваше обещание будет разрешено.

0

Resolve вызовы API в маршрутизаторе, например:

$routeProvider 
.when("/news", { 
    templateUrl: "newsView.html", 
    controller: "newsController", 
    resolve: { 
     message: function(messageService){ 
      return messageService.getMessage(); 
    } 
} 

})

Затем вы можете придать решимость атрибуты в контроллере:

app.controller("newsController", function (message) { 
    $scope.message = message; 
}); 

Got выше код из http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx поэтому проверьте это для более подробной информации.

Если вам нужно что-то более конкретное, предоставьте код.

Смежные вопросы