Angular UI Bootstrap Modal Dialog Close Event
This works for clicking on the backdrop and pressing the esc key if you are opting in on that.
var modalInstance = $modal.open({ templateUrl: '/app/yourtemplate.html', controller: ModalInstanceCtrl, windowClass: 'modal', keyboard: true, resolve: { yourResulst: function () { return 'foo'; } }});var ModalInstanceCtrl = function ($scope, $modalInstance, yourResulst) { var constructor = function () { // init stuff } constructor(); $modalInstance.result.then(function () { // not called... at least for me }, function () { // hit's here... clean up or do whatever }); // VVVV other $scope functions and so on...};
UPDATE: alternative approach
I have no idea why this way is not documented at http://angular-ui.github.io/bootstrap/ ... but I find it much better. You can now use that page's controller or use a specific controller with the controller as syntax. You could even utilize ng-include for the content of the modal, if you want separation on html. The following works with no JS needed in the controller to setup/configure the modal, as long as you have bootstrap/bootstrapUI included in your project/site
<div class="row"> <button class="btn btn-default" data-toggle="modal" data-target="#exampleModal">Open Example Modal</button></div><div class="modal fade" id="exampleModal" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">Close</button> <h2 class="modal-title" id="exampleModalLabel">Modal Example</h2> </div> <div class="modal-body" style="padding-bottom:0px;"> <h3>model markup goes here</h3> </div> </div> </div></div>
I finished with the following code:
$modal.open(modalOptions).result.finally(function(){ console.log('modal has closed');});
This way you can avoid the method then()
This worked for me:
var modalInstance = $modal.open({...}); modalInstance.result.then(function () { //something to do on close });