Angular-ui:是否打开了任何模态?

时间:2015-06-09 05:55:12

标签: javascript angularjs angularjs-scope angular-ui

如果有任何模态打开,我想启动代码。通常我想要这样的东西:

    $scope.$watch(function () {
            return $modal.isOpenState;
        }, function (val) {
            //my code here
        }, true
    );

但我不知道该看什么。是的,我可以检测每个实例的开放事件,例如:

modalInstance.opened.then(function() {
    //my code here
});

但这不是干的。

P.S。我也可以在$('.modal').hasClass('in')函数中创建类似$watch的内容,但这有点难看

P.P.S而且我用ui-router打开模态(见faq here

    $modal.open({
        templateUrl: "...",
        resolve: {...  },
        controller: function($scope) { ... }
    }).result.finally(function() {
        //can put code here, but same issue
    });

1 个答案:

答案 0 :(得分:6)

有一个名为$modalStack的内部服务UI模式使用。此服务由$modal使用,并具有名为getTop的方法来检索当前打开的模式实例。因此,您可以注入此服务,只需在getTop上观看$rootScope结果即可。例如:

app.run(function($rootScope, $modalStack) {
    $rootScope.$watch($modalStack.getTop, function(newVal, oldVal) {
        if (newVal) {
            console.log('opened', newVal, oldVal);
        }
    });
});

演示: http://plnkr.co/edit/ZVD0cryL0qXNGl9UPMxB?p=preview