W moim projekcie używam Angular UI $ modal http://angular-ui.github.io/bootstrap/#/modal
Nie chcę, aby użytkownik zamykał okno modalne, naciskając tło. Chcę, aby modal mógł zostać zamknięty tylko przez naciśnięcie przycisku zamykania, który utworzyłem.
Jak zapobiec zamykaniu modalu?
angularjs
angular-ui
angularjs-service
Rahul Prasad
źródło
źródło
backdrop : 'static'
Działa w przypadku zdarzeń „kliknięcie”, ale nadal możesz użyć klawisza „Esc”, aby zamknąć wyskakujące okienko.
keyboard :false
aby zapobiec zamykaniu wyskakujących okienek klawiszem „Esc”.
Podziękowania dla pkozlowski.opensource za odpowiedź.
Myślę, że pytanie jest powtórzeniem Angular UI Bootstrap Modal - jak zapobiegać interakcji użytkownika
źródło
Stare pytanie, ale jeśli chcesz dodać okna dialogowe potwierdzające przy różnych akcjach zamknięcia, dodaj to do kontrolera instancji modalnej:
$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(); } });
Mam przycisk zamykania w prawym górnym rogu, który uruchamia akcję „anuluj”. Kliknięcie tła (jeśli jest włączone), wyzwala akcję anulowania. Możesz użyć tego, aby użyć różnych wiadomości dla różnych zamkniętych wydarzeń.
źródło
event.preventDefault();
wewnątrzcase "backdrop click"
i wróć, aby zakończyć wykonywanie.O tym jest mowa w dokumentacji
static
może zadziałać.źródło
Skonfiguruj globalnie,
dekorator , jedna z najlepszych funkcji w kątowym. daje możliwość „łatania” modułów firm trzecich.
Powiedzmy, że chcesz to zachowanie we wszystkich swoich
$modal
odniesieniach i nie chcesz zmieniać połączeń,Możesz napisać dekoratora . to po prostu dodaje do opcji -
{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
zmieniono nazwę na$uibModal
Demo online - http://plnkr.co/edit/2MWIpOs3uAG5EFQy6Ndn?p=preview
źródło
dla nowej wersji ngDialog (0.5.6) użyj:
closeByEscape : false closeByDocument : false
źródło