Как поймать фолд события клика при нажатии angular ui bootsrap modal?
В моем приложении используется функция $modal.open()
для открытия модального всплывающего окна, которое использует другую страницу в качестве шаблона. При нажатии кнопки отображается модальное всплывающее окно. Если я нажму кнопку "Отмена", он вызовет эту функцию и отлично работает.
$scope.cancel=function(){
});
Но если пользователь нажимает за пределами модального всплывающего окна, мы не можем поймать это событие по этому коду
$scope.dismiss=function(){
});
Как я могу поймать это событие?
Я видел много статей AngularJS, но не смог найти решение для этого.
Ответы
Ответ 1
$modal.open()
возвращает объект с обещанием. Вы можете использовать обещание и цепочку, хотя и обрабатывать его в catch. Когда вы нажимаете на задний план, он делает dismiss
внутренне и отклоняет обещание.
например: -
var instance = $modal.open(...);
instance.result.then(function(){
//Get triggers when modal is closed
}, function(){
//gets triggers when modal is dismissed.
});
Если вы используете это в дочернем элементе, куда вводится $modalInstance
, вы можете сделать это и там. Поэтому в основном вместо того, чтобы иметь дело с event
, это поможет вам сделать это на более высоком уровне с помощью promises.
Ответ 2
Вы можете использовать
backdrop: 'static'
в ваших настройках. Вот так:
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
backdrop: 'static',
...
});
Документация Bootstrap 3.0 объясняет, что backdrop: 'static'
указывает фон, который не отменяет модальный щелчок.
Ответ 3
Поймайте все клики по html-документу и закройте modal.
Поймать клики внутри модального и остановить распространение.
то есть.
$("html").on("click",closemodal());
$(".modal").on("click",function(event){
event.stopPropagation();
}
Ответ 4
У меня была та же проблема с Angular Mobile UI Demo (1.2), однако в демонстрационных файлах модальная не объявлена в основном JS.
Вместо этого просто добавив еще две переменные в modal1.html сделал трюк.
<div class="modal-dialog" ui-outer-click="Ui.turnOff('modal1')" ui-outer-click-if="Ui.active('modal1')">
Это объясняется здесь:
http://mobileangularui.com/docs/#outer-click
Оба свойства необходимы для его работы.