2015-07-21 2 views
1

Я создаю модальный и закрываю его, как только данные поступают в фоновом режиме.AngularJS modal async close не работает

var modal = modal.open({..some params..}); 

//after data loads 
modal.close(); 

Так моя проблема, так как все является асинхронным, если мои данные приходят мгновенно, то мой modal.close() выполняется перед модальным открывается полностью, а затем мой экран остается застрял с модальным экраном.

Одно решение, которое я нашел, добавив таймаут к modal.close

$timeout(function() { 
modal.close(); 
}, 1) 

Это работает, но это правильный способ сделать это? Или есть другое лучшее решение?

+0

Как вы получаете данные? Если вы используете угловую службу $ http, вы можете использовать успех/ошибку на возвращаемом объекте обещания для трансляции сообщения, а затем ваши контроллеры могут воздействовать на него .... – juju

+0

Я получаю данные из службы кеша, которая уже кэширована данными! – KingJames

+0

Какова цель этого модального? – Okazari

ответ

2

Модальный экземпляр имеет обещание opened, которое вы должны использовать, чтобы гарантировать, что модальное завершено, прежде чем пытаться его закрыть. Из the docs:

opened - обещание, что не будет решен, когда модальное получает открыты после загрузки шаблона содержания и решить все переменные

rendered - обещание, что не будет решен, когда модальный визуализируются.

Смешанное с запросом HTTP может выглядеть

modal = $modal.open({...}) 
$http.get(...).then(function(response) { 
    modal.opened.then(modal.close) 
}) 

Вот demo обоих, как вы сейчас делаете это и делает это с помощью opened.

$scope.open = -> 
    modalInstance = $modal.open(
    templateUrl: 'myModalContent.html', 
    controller: 'ModalInstanceCtrl' 
) 

    if $scope.work 
    modalInstance.opened.then(-> 
     modalInstance.close() 
    ) 
    else 
    modalInstance.close() 
+0

Это сработало. Благодаря! – KingJames