web-dev-qa-db-fra.com

angular ui modal après événement de fermeture

Existe-t-il un moyen d'appeler une fonction après l'appel d'une fenêtre modale (que ce soit avec un bouton ou en cliquant sur le fond)

var dialog, options;

options = {
  windowClass: "lightBox"
  templateUrl: "url to the template",
  controller: "some random controller",
  scope: $scope
});

$("body").css({
  'overflow': 'hidden'
});

dialog = $modal.open(options);

dialog.result.then(function() {
  $("body").css({
    'overflow': 'auto'
  });
});

Je veux que chaque fois que la fenêtre modale ferme la fonction dans le résultat, la promesse sera exécutée. Maintenant, il s'exécute simplement lorsque je ferme le modal manuellement mon $ modalInstance.close (). Mais si je clique sur le fond, cette méthode n'est pas appelée

une idée de comment je peux faire ça?

39
Safari

Je suppose que vous utilisez les boîtes de dialogue modales d'angular-ui. Mais avant d'entrer dans les détails, un peu de documentation sur les promesses dans AngularJS est nécessaire. Vous devez savoir que chaque fonction puis peut accepter 3 paramètres en tant que tels:

then(successCallback, errorCallback, notifyCallback) 
  • successCallback est exécuté lorsque la promesse est résolue.
  • errorCallback est exécuté lorsque la promesse est rejetée.
  • notifyCallback est exécuté lorsqu'il est notifié.

Dans le cas du modal d'angular-ui, cliquer sur la toile de fond entraînera une promesse rejetée. Dans cet esprit, votre code pourrait être changé en:

dialog.result.then(function () {
  alert('Modal success at:' + new Date());
}, function () {
  alert('Modal dismissed at: ' + new Date());
});

Vous pouvez voir un plongeur fonctionnel ici

59
Nicolas ABRIC

Angular 1.2 prend en charge les promesses avec un finally(callback) :

dialog.result.finally(function() {
    alert('clean up resources');
});

Découvrez le plongeur de travail ici .

20
Derek