catching Angular Bootstrap UI $uibModal closed event after the modal was closed

Avner Hoffmann picture Avner Hoffmann · Jul 6, 2016 · Viewed 26.5k times · Source

I'm opening a modal window using $uibModal.open from another controller, and need to be notified when the modal window was closed completely (and not during closing...) so I'll be able to run a function.

The code that opens the modal is as follows:

var modalInstance = $uibModal.open({
  templateUrl: "myModalContent.html",
  controller: "termModalCtrl",
  windowClass: 'app-modal-window',
  resolve: {
    'params': function () { return id }
  }
});

I saw some suggested solutions to use:

modalInstance.result.then(function(result) {
});

The problem is that the function callback is called prior to the actual closing of the modal window (when the modal window is still open) and this is not the behavior I want cause it means that it catches the "closing" event and not the "closed" event of the modal.

Is there a neat and simple way to implement this? I'd be surprised if not since this behavior is very common in any UI frameworks on the planet...

Please help!

Answer

Srijith picture Srijith · Jul 6, 2016

Try this.

.open method returns a promise that could be chained with .closed which is one of the many properties of .open method.

I tested it and it shows the alert only after the modal has closed and not while it's 'closing'.

Refer the 'closed' under Return section here

var modalInstance = $uibModal.open({
    templateUrl: "myModalContent.html",
    controller: "termModalCtrl",
    windowClass: 'app-modal-window',
    resolve: {
        'params': function () { return id }
    }
}).closed.then(function(){
  window.alert('Modal closed');
});

here is the plunker http://plnkr.co/edit/yB3k8e3R3ZLQFQ6sfLYW?p=preview