1

Я следующий код для угловой директивы:Загрузка данные из службы в угловых Директивах с использованием параметра из директивы Scope

directive('searchTerms', ['$http', function ($http) { 
      return { 
       scope: { model: "=ngModel", metaDataUrl: "@metaData" }, 
       templateUrl: 'infohelper/SearchTermsTemplate', 
       link: function ($scope) {...} 
       controller: function ($scope) {...} 
      } 
} 

Для каждого использования директивы, другой URL передается $scope переменной metaDataUrl. Исходя из того, что различные метаданные должны быть загружены через службу $http. И мой вопрос: как я могу убедиться, что метаданные загружены до функции link? Есть ли что-то похожее на параметр resolve в службе $routeProvider, который можно использовать для директив?

ответ

1

$http возвращает обещание, поэтому вы можете управлять ответом асинхронно, как только он будет готов внутри вашей функции связи.

Если нет, вы можете объявить наблюдателя внутри своей функции связи.

Взгляните на этот пост: Angular: running function in controller when all directives are loaded

Это немного отличается от вашего дела, но должно помочь вам.

Также вы должны прочитать: https://github.com/angular/angular.js/issues/2095

+0

Нет, это не правильный способ сделать это. Я хочу избежать этого - ненужные циклы дайджеста. Мне было интересно, почему нет возможности ждать обещания синхронно. – ax1mx2

+0

очевидно, что это нехороший способ, но это обходное решение. Синхронное программирование не рекомендуется для Интернета, вы не можете приостановить все, только для ожидания вызова http. –

+0

В основном вы просите что-то, чего не существует, поэтому вы должны найти обходное решение для удовлетворения ваших потребностей. –

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