Search code examples
angularjsangular-uiangular-ui-bootstrap

Is there a way to automatically close Angular UI Bootstrap modal when route changes?


I've got links in templates inside modals. When I click them, the current page changes, but the overlay and modal stay. I could add ng-click="dimiss()" to every link in all templates in modals, but is there a better way? E.g. to close it automatically on successful route change or add just one ng-click per template to handle all links?


Solution

  • If you want all the opened modals to be closed whenever a route is changed successfully, you could do it in one central place by listening to the $routeChangeSuccess event, for example in a run block of your app:

    var myApp = angular.module('app', []).run(function($rootScope, $uibModalStack) {
      $uibModalStack.dismissAll();
    }); 
    

    Here you can see that the $uibModalStack service gets injected on which you can call the dismissAll method - this call will close all the currently opened modals.

    So, yes, you can handle modals closing centrally, in one place, with one line of code :-)