2015-10-06 2 views
0

У меня есть $modalInstance. Я могу получить близкое уведомление о событии с помощью обещаний:Как предотвратить блокировку Angular-UI модального закрытия?

$modalInstance.result.finally(function() { 
    // code here 
}); 

Но я не знаю, как предотвратить закрытие, если пользователь закрывает модель по ошибке. Я хочу спросить пользователя, действительно ли кто-то хочет закрыть модель и закрыть ее, если он это сделает. Тем не менее, я не хочу включать backdrop: 'static':

$modal.open({ 
    ... // other options 
    backdrop : 'static' 
}); 

Спасибо.

+0

Когда вы закрываете модальный процесс, мне кажется, что вы можете как-то с этим работать, я думаю, что этот вопрос может помочь вам: http://stackoverflow.com/questions/30356844/angularjs-bootstrap- modal-clos-call-when-click-outside-esc – klskl

+0

Я не думаю, что есть необходимость использования модальности boostrap. Вы можете просто создать div/форму с z-индексом, большим нуля. И используйте ng-hide/ng-show, чтобы сделать hide/visible. – SaiGiridhar

+0

@SaiGiridhar Ну, я должен использовать его в проекте, это требование. В прошлый раз, когда я сделал modal, это был только VanillaJS :) – Georgy

ответ

2

Я сделал некоторые дополнительные исследования, и я нашел another question, подобный этому, это ответ нашел на этот вопрос (не стесняйтесь +1 к нему, а не меня)

$scope.$on('modal.closing', function(event, reason, closed) { 
    var r = prompt("Are you sure you wanna close the modal? (Enter 'YES' to close)"); 

    if (r !== 'YES') { 
     event.preventDefault(); 
    } 
}); 

Поместите это внутри модальный контроллер.

Это не то, что вы искали, это спросит вас, если вы попытаетесь закрыть модальный, уволив (нажав внешний модальный), отмените или кнопку ok. Вы можете попробовать и изменить его в соответствии с вашими потребностями.

Обновление: Добавлен простой if else проверку, чтобы увидеть, что была нажата, и если фон нажал затем предложит пользователю:

$scope.$on('modal.closing', function(event, reason, closed) { 

    if (reason == 'ok' || reason == 'cancel'){ 
     console.log('closed'); 
    } else { 
     // this is if 'reason' == 'backdrop click' 
     var r = prompt("Are you sure you wanna close the modal? (Enter 'YES' to close)"); 

     if (r !== 'YES') { 
      event.preventDefault(); 
     } 
    } 
}); 

Как вы думаете, это решение достаточно?

+0

Upvote для связи с другим вопросом. –