uibmodal uib tpls open modal example bootstrap angularjs angular-ui angular-ui-bootstrap angularjs-service

angularjs - uib - Cómo cerrar Angular UI Modal desde cualquier lugar



uib-pagination angularjs (3)

Estoy usando el diálogo modal de arranque UI angular y lo creo dentro de un servicio:

myApp.factory(''ModalService'', [''$modal'', function($modal) { return { trigger: function(template) { $modal.open({ templateUrl: template, size: ''lg'', controller: function($scope, $modalInstance) { $scope.ok = function() { $modalInstance.close($scope.selected.item); }; $scope.cancel = function() { $modalInstance.dismiss(''cancel''); }; } }); }, close: function() { // this should close all modal instances } }; }]);

¿Cómo puedo cerrar todas las instancias modales al llamar a ModalService.close() desde un controlador o en absoluto?


Agregué la línea a continuación para evitar el enrutamiento del botón de retroceso del navegador y el cierre de la ventana emergente. Necesitamos inyectar $ modalStack en el controlador angular.

event.preventDefault(); $modalStack.dismissAll(''close'');


Así es como lo conseguí trabajando en mi proyecto sin utilizar ninguna fábrica o código adicional.

//hide any open $mdDialog modals angular.element(''.modal-dialog'').hide(); //hide any open bootstrap modals angular.element(''.inmodal'').hide(); //hide any sweet alert modals angular.element(''.sweet-alert'').hide();

Tengo una función de tiempo de espera que emite el cierre de sesión como $rootScope.$emit(''logout''); y el oyente en mi servicio es el siguiente:

$rootScope.$on(''logout'', function () { //hide any open $mdDialog modals angular.element(''.modal-dialog'').hide(); //hide any open bootstrap modals angular.element(''.inmodal'').hide(); //hide any sweet alert modals angular.element(''.sweet-alert'').hide(); //do something else here });

No sé si este es el enfoque correcto, pero funciona para mí.


Inyecte el servicio $modalStack y llame a la función $modalStack.dismissAll() , consulte el código en GitHub para obtener más detalles:

myApp.factory(''ModalService'', [''$modal'', ''$modalStack'' function($modal, $modalStack) { return { trigger: function(template) { $modal.open({ templateUrl: template, size: ''lg'', controller: function($scope, $modalInstance) { $scope.ok = function() { $modalInstance.close($scope.selected.item); }; $scope.cancel = function() { $modalInstance.dismiss(''cancel''); }; } }); }, close: function(reason) { $modalStack.dismissAll(reason); } }; }]);