在我的例子中,当单击模态时,我们希望显示一个提示,警告用户这样做会丢弃模态表单中所有未保存的数据。为此,请在模式上设置以下选项:
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' 不会触发此回调。