Açısal-ui modunun kapanmasını nasıl önleyebilirim?


Yanıtlar:


195

Modalinizi oluştururken davranışını belirtebilirsiniz:

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

2
Evet, bu doğru cevap :) Paylaştığın için teşekkürler!
skywalker

Güzel! Paylaşım için teşekkürler. +1
Khanh Tran

10
Bunları dinamik olarak ayarlamanın herhangi bir yolu var mı - diyelim ki pop-up kesintiye uğramaması gereken bir işlemin ortasındaysa?
RonLugge


23

Eski soru, ancak çeşitli kapatma eylemleri için onay iletişim kutuları eklemek istiyorsanız, bunu kalıcı örnek denetleyicinize ekleyin:

$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();
    }
});

Sağ üstümde "iptal" eylemini tetikleyen bir kapat düğmesi var. Arka plana tıklamak (etkinleştirilmişse), iptal eylemini tetikler. Bunu, çeşitli yakın etkinlikler için farklı mesajlar kullanmak için kullanabilirsiniz.


Soruma nasıl cevap veriyor?
Rahul Prasad

Bununla, bir modal kapatılması talimatı verilmişse, talimatın nedenine bağlı olarak araya girebilirsiniz. Buna bağlı olarak, istenirse özel mantık eklersiniz veya belki de modu gerçekten kapatmadan önce kullanıcıdan onay ister.
Tiago

Soru belirtildiği gibi, Modal'in kapanmasını engelleyecek bir mantık söyle bana?
Rahul Prasad

Tüm istediğiniz buysa, o zaman sadece event.preventDefault();içini kullanın case "backdrop click"ve yürütmeyi sonlandırmak için geri dönün.
Tiago

5
+1. Bu aslında modal'ın özellikleri sınırlamadan kapanmasını önlemenin çok daha iyi bir yoludur (fon ve klavye tetikleyicileri). Not: olay yayınlanır, bu nedenle uibModalInstance kapsamında veya aşağı akış kapsamlarında dinlenmelidir. 0.13 itibariyle: a5a82d9
Sergej Popov

13

Dokümantasyonda bahsedilen budur

zemin - fonun varlığını kontrol eder. İzin verilen değerler: true (varsayılan), false (arka plan yok), 'statik' - arka plan mevcut, ancak kalıcı pencerenin dışına tıklandığında kalıcı pencere kapatılmıyor.

static Çalışabilir.


Kalıcı pencerenin dışına tıklandığında arka planın görüntülenmemesi ve kalıcı pencerenin kapatılması için herhangi bir seçenek var mı?

8

Global olarak yapılandırın,

dekoratör , açısaldaki en iyi özelliklerden biridir. 3. parti modülleri "yama" yapma yeteneği verir.

Diyelim ki tüm $modalreferanslarınızda bu davranışı istiyorsunuz ve aramalarınızı değiştirmek istemiyorsunuz,

Bir dekoratör yazabilirsiniz . bu sadece seçeneklere katkıda bulunur -{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;
    })
});
  • Not: en son sürümlerde, olarak $modalyeniden adlandırıldı$uibModal

Çevrimiçi demo - http://plnkr.co/edit/2MWIpOs3uAG5EFQy6Ndn?p=preview


5

ngDialog'un (0.5.6) yeni sürümü için şunu kullanın:

closeByEscape : false
closeByDocument : false
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.