2013-09-20 3 views
3

У меня есть общая служба AJS, которая потребляется по специальной директиве AJS.
Мне нужно сохранить мою директиву до тех пор, пока в сервисе не будет разрешено обещание. Из того, что я прочитал, это делается через directivecontroller, но я не видел никаких примеров, кроме маршрута.Задержка с угловыми директивами

Как отложить мою директиву до тех пор, пока не будет разрешено обещание на обслуживание?

enter image description here

+0

Не могли бы вы уточнить, в какой части директивы? Директивы очень универсальны, поскольку вы можете изменять фазы компиляции/ссылки/контроллера, и ответ может зависеть от этого! –

+0

Отличная картина, хотя может быть полезно опубликовать код из минимальной директивы, показывая, что нужно отложить. –

ответ

0

У меня похожая ситуация. Моя директива должна дождаться, когда сторонняя библиотека завершит некоторые манипуляции с DOM. Я использую функцию повтора для проверки каждые 50 миллисекунд, чтобы увидеть, существует ли еще элемент DOM, который мне нужен.

В директиве:

Utils.retry(function() { return !!$(selector)[0]; }, 50, 10).then(function() {   
    doSomethingInterestingWith($(selector)); 
}); 

Функция повтора (я определяю это в службе Utils):

var retry = function(fn, interval, maxTries) { 
    var result, deferred; 
    deferred = $q.defer(); 

    // if we get a result, return it 
    result = fn(); 
    if (result !== false) { deferred.resolve(result); } 

    else { 
    // if we've run out of tries, return false 
    if (maxTries) { maxTries -= 1; } 
    if (maxTries === 0) { deferred.reject('timed out'); } 

    // otherwise try again after interval 
    else { 
     $timeout(function() { 
     deferred.resolve(retry(fn, interval, maxTries)); 
     }, interval); 
    } 
    } 

    return deferred.promise; 
}; 

Utils.retry = retry; 

ВИДЕТЬ plunk для рабочего примера.

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