Dans mon application, il utilise la fonction $modal.open()
pour ouvrir une fenêtre contextuelle modale qui utilise une autre page comme modèle. En cliquant sur le bouton, la fenêtre contextuelle modale est affichée. Si je clique sur le bouton Annuler, la fonction est appelée et fonctionne également correctement.
$scope.cancel=function(){
});
Mais si l'utilisateur clique en dehors de la fenêtre contextuelle modale, nous ne pouvons pas capturer cet événement avec ce code.
$scope.dismiss=function(){
});
Comment puis-je attraper cet événement?
J'ai vu de nombreux articles sur AngularJS, mais je n'ai pas trouvé de solution à cela.
$modal.open()
renvoie un objet avec une promesse. Vous pouvez utiliser la promesse, l'enchaîner et la manipuler. Lorsque vous cliquez sur le fond à l'extérieur, une dismiss
est créée en interne et la promesse est rejetée.
ex:-
var instance = $modal.open(...);
instance.result.then(function(){
//Get triggers when modal is closed
}, function(){
//gets triggers when modal is dismissed.
});
Si vous utilisez ceci dans l'enfant où $modalInstance
est injecté, vous pouvez également le faire ici. Donc, fondamentalement, plutôt que de traiter avec event
, cela vous aide à le faire à un niveau supérieur à l'aide de promesses.
Vous pouvez utiliser
backdrop: 'static'
dans vos options. Comme ça:
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
backdrop: 'static',
...
});
La documentation Bootstrap 3.0 explique que backdrop: 'static'
spécifie un fond ne rejetant pas le modal au clic.
J'ai eu le même problème avec la Angular Mobile UI Demo (1.2). Cependant, dans les fichiers de démonstration, le modal n'est pas déclaré dans le JS principal.
Au lieu de cela, le simple fait d’ajouter deux variables à in modal1.html.
<div class="modal-dialog" ui-outer-click="Ui.turnOff('modal1')" ui-outer-click-if="Ui.active('modal1')">
Ceci est expliqué ici: http://mobileangularui.com/docs/#outer-click
Les deux propriétés sont nécessaires pour que cela fonctionne.
Attrapez tous les clics sur le document html et fermez le modal.
Attrapez les clics dans le modal et arrêtez la propagation.
c'est à dire.
$("html").on("click",closemodal());
$(".modal").on("click",function(event){
event.stopPropagation();
}