I'm want to launch a code if any modal opens. Commonly I'm want something like:
    $scope.$watch(function () {
            return $modal.isOpenState;
        }, function (val) {
            //my code here
        }, true
    );
But I'm didn't know what to watch. Yes, I can detect open event for each instance, like:
modalInstance.opened.then(function() {
    //my code here
});
But this isn't DRY.
P.S. Also I'm can make something like $('.modal').hasClass('in') in $watch function, but this is little bit ugly
P.P.S And btw I'm using ui-router to open modals (see faq here)
    $modal.open({
        templateUrl: "...",
        resolve: {...  },
        controller: function($scope) { ... }
    }).result.finally(function() {
        //can put code here, but same issue
    });
                There is an internal service UI modal uses called $modalStack. This service is used by $modal and has method called getTop to retrieve currently opened modal instance. So you can inject this service and simply watch getTop result on $rootScope. For example:
app.run(function($rootScope, $modalStack) {
    $rootScope.$watch($modalStack.getTop, function(newVal, oldVal) {
        if (newVal) {
            console.log('opened', newVal, oldVal);
        }
    });
});
Demo: http://plnkr.co/edit/ZVD0cryL0qXNGl9UPMxB?p=preview
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With