如何防止angular-ui模态关闭?


Answers:


193

创建模态时,可以指定其行为:

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

2
是的,这是正确的答案:)感谢您的分享!
天行者2015年

凉!感谢分享。+1
Khanh Tran 2015年

10
有没有办法动态地设置这些设置?例如,弹出窗口是否在不应中断的操作中间?
RonLugge


22

旧问题,但是如果要在各种关闭操作上添加确认对话框,请将其添加到模态实例控制器中:

$scope.$on('modal.closing', function(event, reason, closed) {
    console.log('modal.closing: ' + (closed ? 'close' : 'dismiss') + '(' + reason + ')');
    var message = "You are about to leave the edit view. Uncaught reason. Are you sure?";
    switch (reason){
        // clicked outside
        case "backdrop click":
            message = "Any changes will be lost, are you sure?";
            break;

        // cancel button
        case "cancel":
            message = "Any changes will be lost, are you sure?";
            break;

        // escape key
        case "escape key press":
            message = "Any changes will be lost, are you sure?";
            break;
    }
    if (!confirm(message)) {
        event.preventDefault();
    }
});

我的右上角有一个关闭按钮,它会触发“取消”操作。单击背景(如果启用),将触发取消操作。您可以使用它对各种关闭事件使用不同的消息。


它如何回答我的问题?
Rahul Prasad

通过此操作,您可以根据指令的原因来拦截是否已指示关闭模态。基于此,您可以根据需要添加自定义逻辑,或者在实际关闭模式之前提示用户进行确认。
Tiago

正如问题所述,请告诉我一个逻辑,这将防止模式关闭?
Rahul Prasad

如果仅此而已,则只需使用event.preventDefault();insidecase "backdrop click"并返回以结束执行即可。
Tiago

4
+1。实际上,这是防止模式关闭而不限制功能(背景和键盘触发器)的更好方法。注意:事件是广播的,因此必须在uibModalInstance范围或下游范围上侦听。截至0.13:a5a82d9
Sergej Popov

13

这就是文档中提到的内容

背景-控制背景的存在。允许的值:true(默认),false(无背景),“静态”-存在背景,但在模态窗口之外单击时,模态窗口未关闭。

static 可能有效。


有什么选择可以防止在模态窗口之外单击时不显示背景并且模态窗口应该关闭?

8

全局配置

装饰器最好的功能之一。提供了“修补”第三方模块的功能。

假设您在所有$modal参考中都希望这种行为并且不想更改通话,

您可以编写一个装饰器。只会增加选项-{backdrop:'static', keyboard:false}

angular.module('ui.bootstrap').config(function ($provide) {
    $provide.decorator('$modal', function ($delegate) {
        var open = $delegate.open;

        $delegate.open = function (options) {
            options = angular.extend(options || {}, {
                backdrop: 'static',
                keyboard: false
            });

            return open(options);
        };
        return $delegate;
    })
});
  • 注意:在最新版本中,已$modal重命名为$uibModal

在线演示-http: //plnkr.co/edit/2MWIpOs3uAG5EFQy6Ndn?p=preview


5

对于新版本的ngDialog(0.5.6),请使用:

closeByEscape : false
closeByDocument : false
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.