9

我使用另一个控制器的$ uibModal.open打开模态窗口,并且需要在模态窗口完全关闭时(而不是在关闭期间)通知。 ..)所以我可以运行一个函数。

打开的模式是如下代码:

var modalInstance = $uibModal.open({ 
    templateUrl: "myModalContent.html", 
    controller: "termModalCtrl", 
    windowClass: 'app-modal-window', 
    resolve: { 
    'params': function() { return id } 
    } 
}); 

我看到了一些建议的解决方案使用:

modalInstance.result.then(function(result) { 
}); 

的问题是,回调函数先于实际收盘称为(当模态窗口仍然打开时),这不是我想要的行为,因为这意味着它捕捉模式的“关闭”事件而不是“关闭”事件。

是否有一个简洁而实用的方法来执行此操作?我会很惊讶,如果没有,因为这种行为是非常普遍的在这个星球上的任何UI框架...

请帮助!

回答

22

试试这个。

.open方法返回可能与.closed链接的承诺,这是.open方法的许多属性之一。

我测试了它,它仅在模式关闭后才显示警报,而不是在“关闭”时显示。

请参考下返回部分here

var modalInstance = $uibModal.open({ 
    templateUrl: "myModalContent.html", 
    controller: "termModalCtrl", 
    windowClass: 'app-modal-window', 
    resolve: { 
     'params': function() { return id } 
    } 
}).closed.then(function(){ 
    window.alert('Modal closed'); 
}); 

这里是plunker http://plnkr.co/edit/yB3k8e3R3ZLQFQ6sfLYW?p=preview

+2

我想你的解决方案,但它不工作“封闭” - 我发现了一个异常“无法获取属性'then'未定义或空引用“。看起来像“封闭”的财产对于由开放方法返回的承诺是不确定的... –

+2

没有。从代码中删除modalInstance.result.then ...。 – Srijith

+0

为了达到这个目的,我们必须使用$ uibModalInstance.close('cancel')关闭弹出窗口。但不使用解雇功能。 –