3

私は Angular UI Bootstrap モーダル (ui.bootstrap.dialog) を使用しており、backdrop: true と backgroundClick: true があります。

しかし、ユーザーがモーダルから離れてクリックすると、閉じるだけでなく追加の機能も実行したいと考えています。

Dialog.prototype._bindEvents を上書きできると考えてソース コードを見ていましたが、うまくいきませんでした。

また、これは元のブートストラップ モーダルの「非表示」イベントである可能性があると思いますが、このイベントをキャッチできませんでした。

背景のクリックで実行する関数を定義する方法はありますか。

ありがとう --MB

4

5 に答える 5

3

これは古い質問であることは知っていますが、ここに来て後で解決策を見つけたので...

次のように、モーダルのスコープにブロードキャストされた「modal.closing」イベントを見ることができます。

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

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

2 番目のパラメーターは理由です ($close() メソッドに渡されるものは何でも)。背景をクリックする理由は背景クリックです

ここで働くプランカー

于 2015-09-21T15:25:56.017 に答える
1

モーダルでスコープ破棄イベントを見ることができます:

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

または、モーダルで却下の約束を解決し、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

ダイアログクラスは現在書き直されていますが、オプションオブジェクトを変更して、クローズ時に呼び出される関数を受け取り、クローズプロトタイプで null でない場合はその関数を呼び出すことができます。

注意してください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

my_dlg.handleBackDropClick を上書きするのはどうですか?

于 2013-05-17T22:28:40.963 に答える