2016-09-30 2 views
1

Мое приложение может открыть модальный, если есть уже один открытый. Если это так, я хочу закрыть этот модальный и открыть новый после этого.Как проверить, открыт ли модем Bootstrap UI? - AngularJS

служба открыть модальности:

app.service('ModalService', function($uibModal) { 
this.open = function(size, template, content, backdrop, controller) { 
    var modalInstance = $uibModal.open({ 
     animation: true, 
     templateUrl: content, 
     windowTemplateUrl: template, 
     controller: controller, 
     backdrop: backdrop, 
     size: size, 
     resolve: {} 
    }); 
    return modalInstance; 
}; 

Тогда я открываю один с:

var m = ModalService.open('lg', '', 'ng-templates/modal.html', true, 'ModalController'); 

И я могу закрыть его:

m.close(); 

я могу использовать только m.close() в том же коммутаторе/случае, когда я открываю модальный. Если я хочу закрыть его в другом, если инструкция позже в коде m не определена.

В любом случае. Могу ли я проверить, открыт ли модальный? Если я console.log (м), то есть это:

d.$$state.status = 1 
d.$$state.value = true 

Но я не могу получить доступ к переменным м в другом месте в моем приложении, поэтому я не могу проверить это.

ответ

2

Просто добавьте флаг или геттер на ваш ModalService.

app.service('ModalService', function($uibModal) { 
var open = false, 
    modalInstance; 

this.isOpen = function() { 
    return open; 
}; 

this.close = function (result) { 
    modalInstance.close(result); 
}; 

this.dismiss = function (reason) { 
    modalInstance.dismiss(reason); 
}; 

this.open = function(size, template, content, backdrop, controller) { 
    var modal = $uibModal.open({ 
     animation: true, 
     templateUrl: content, 
     windowTemplateUrl: template, 
     controller: controller, 
     backdrop: backdrop, 
     size: size, 
     resolve: {} 
    }); 

    //Set open 
    open = true; 

    //Set modalInstance 
    modalInstance = modal; 

    //Modal is closed/resolved/dismissed 
    modal.result.finally(function() { 
     open = false; 
    }); 

    return modal; 
}; 
} 

Вы можете позвонить: ModalService.isOpen(), чтобы проверить, открыт ваш покадрово.

+0

Очень аккуратно, даст ему шанс и отчет назад. Благодарю. – Bento

+0

Это работает. Любая идея, как я могу закрыть модальную? Теперь я заменил var m на $ rootScope.m, который позволяет мне получить доступ к m во всем приложении. Удивительно, если есть лучшее решение. $ rootScope.m = ModalService.open ('lg', '', 'ng-templates/modal.html', true, 'ModalController'); Тогда я делаю: $ rootScope.m.close(); – Bento

+0

Просто сохраните 'modalInstance' как' open' как локальную переменную и реализуйте дополнительную функцию (например: 'ModalService.closeModal()') и закройте модальный внутри вашей службы. Вопрос в том, почему вы хотите закрыть модальную систему вне ее сферы. –

0

Очень просто:

Поскольку $uibModal всегда использует DIV с именем класса modal вы можете просто проверить, если какой-либо элемент с таким именем класса существует:

//If no modal is open 
if (document.getElementsByClassName("modal").length === 0) { 
    //do something... 
} else { 
    // do something when a modal is open 
} 
Смежные вопросы