在我的情况下,当关闭模态框时,我们希望显示一个提示,警告用户这样做将会丢失模态表单中的所有未保存数据。为此,请在模态框上设置以下选项:
var myModal = $uibModal.open({
controller: 'MyModalController',
controllerAs: 'modal',
templateUrl: 'views/myModal.html',
backdrop: 'static',
keyboard: false,
scope: modalScope,
bindToController: true,
});
这可以防止在点击外部区域时关闭模态框:
backdrop: 'static'
这可以防止在按下“esc”键时关闭模态框:
keyboard: false
然后在模态控制器中添加自定义的“取消”函数 - 在我的情况下,弹出一个漂亮的警告框,询问用户是否希望关闭模态框:
modal.cancel = function () {
$timeout(function () {
swal({
title: 'Attention',
text: 'Do you wish to discard this data?',
type: 'warning',
confirmButtonText: 'Yes',
cancelButtonText: 'No',
showCancelButton: true,
}).then(function (confirm) {
if (confirm) {
$uibModalInstance.dismiss('cancel');
}
});
})
};
最后,在模态控制器内添加以下事件监听器:
var myModal = document.getElementsByClassName('modal');
var myModalDialog = document.getElementsByClassName('modal-dialog');
$timeout(function () {
myModal[0].addEventListener("click", function () {
console.log('clicked')
modal.cancel();
})
myModalDialog[0].addEventListener("click", function (e) {
console.log('dialog clicked')
e.stopPropagation();
})
}, 100);
"
"myModal"是您想要在其上调用modal.cancel()回调函数的元素。
"myModalDialog"是模态内容窗口 - 我们停止该元素的事件传播,以便它不会冒泡到"myModal"。
这仅适用于点击模态框外部(也就是单击背景)。按下“esc”键不会触发此回调。
"