13

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

打开modal的代码如下:

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

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

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

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

有没有一种简洁而简单的方法来实现这一点?如果不是,我会感到惊讶,因为这种行为在地球上的任何 UI 框架中都很常见......

请帮忙!

4

2 回答 2

28

尝试这个。

.open方法返回一个可以链接的承诺,.closed它是方法的众多属性之一.open

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

请参阅此处“退货”部分下的“关闭”

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

于 2016-07-06T11:48:12.040 回答
4

使用modalInstance.resultpromise 第二个回调来捕获关闭事件。我也收到异常'无法获取未定义或空引用的属性'然后'.closed.then

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

modalInstance.result
   .then(function (selectedItem) {
    //
   }, function () {
    //close callback
    console.info('modal closed');
   });
于 2018-03-16T08:20:31.787 回答