3

我正在使用 Angular UI Bootstrap 模式(ui.bootstrap.dialog)并且我有背景:true 和背景点击:true。

但是当用户点击离开模式时,我不仅要执行关闭,还要执行其他功能。

我正在查看源代码,认为我可以覆盖 Dialog.prototype._bindEvents 但没有任何运气。

我也认为这可能是原始引导模式中的“隐藏”事件,但我无法捕捉到这个事件。

有没有办法定义一个在背景点击时执行的函数,以及如何去做。

谢谢--MB

4

5 回答 5

3

我知道这是一个老问题,但是自从我来到这里并后来找到了解决方案......

您可以观看广播到模态范围的“modal.closure”事件,如下所示:

.controller('modalCtrl', function($scope, $modalInstance) {

  $scope.$on('modal.closing', function(event, reason, closed) {
      console.log('reason: ', reason);
  });
})

第二个参数是原因(无论传递给 $close() 方法)。点击背景的原因是背景点击

这是一个工作的笨蛋

于 2015-09-21T15:25:56.017 回答
1

您可以使用

backdrop: 'static'

在您的选择中。像这样:

var modalInstance = $modal.open({
    templateUrl: 'myModalContent.html',
    controller: 'ModalInstanceCtrl',
    backdrop: 'static',
    ...
});
于 2014-12-03T11:41:45.843 回答
1

您可以在模式中观看范围破坏事件:

$scope.$on('$destroy', function () {});

或者在你的模式中解决dismiss Promise并链接一个通过DI的新承诺。

创建模式时注入一个延迟对象(从不承诺):

var close = $q.defer();
var modalInstance = $modal.open({
    ...
    closePromise: function () {
        return close;
    }
});

close.promise.then(function ( someData ) {
    // On every modal close
});

在模态中:

//                         resolve       dismiss
$modalInstance.result.then(angular.noop, function () {
    closePromise.resolve( someData );
});
于 2013-11-15T13:50:07.577 回答
1

现在正在重写对话框类,但是为了快速和肮脏,您可以修改选项对象以接收要在关闭时调用的函数,并在关闭原型中调用该函数,如果它不为空:

注意closeFn

var defaults = {
    backdrop: true,
    dialogClass: 'modal',
    backdropClass: 'modal-backdrop',
    transitionClass: 'fade',
    triggerClass: 'in',
    resolve:{},
    closeFn:null,  // added with null default
    backdropFade: false,
    dialogFade:false,
    keyboard: true, // close with esc key
    backdropClick: true // only in conjunction with backdrop=true
    /* other options: template, templateUrl, controller */
  };

在关闭原型中:

if (self.options.closeFn!==null) {
   self.options.closeFn();   
}

控制器:

 function doSomething() {
    alert('something');
  }

  $scope.opts = {
    backdrop: true,
    keyboard: true,
    backdropClick: true,
    template:  t, // OR: templateUrl: 'path/to/view.html',
    controller: 'TestDialogController',
    closeFn: doSomething
  };

我在这里嘲笑了这个:http: //plnkr.co/edit/iBhmRHWMdrlQr4q5d1lH ?p=preview

于 2013-05-17T21:08:52.210 回答
0

What about over writing my_dlg.handleBackDropClick?

于 2013-05-17T22:28:40.963 回答