如果有任何模态打开,我想启动代码。通常我想要这样的东西:
$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
});
答案 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);
}
});
});