40

モーダルウィンドウが呼び出された後に関数を呼び出す方法はありますか(ボタンで発生したか、背景をクリックして発生したかに関係なく)

var dialog, options;

options = {
  windowClass: "lightBox"
  templateUrl: "url to the template",
  controller: "some random controller",
  scope: $scope
});

$("body").css({
  'overflow': 'hidden'
});

dialog = $modal.open(options);

dialog.result.then(function() {
  $("body").css({
    'overflow': 'auto'
  });
});

モーダルウィンドウが結果の関数を閉じるたびに、約束が実行されることを望みます。モーダルを手動で閉じると、$ modalInstance.close()が実行されるようになりました。しかし、背景をクリックすると、このメソッドは呼び出されません

どうすればこれを行うことができますか?

4

2 に答える 2

60

angular-ui のモーダル ダイアログを使用していると仮定します。しかし、詳細に入る前に、AngularJS の promise に関するドキュメントが少し必要です。すべてのthen関数が 3 つのパラメーターをそのまま受け入れることができることを知っておく必要があります。

then(successCallback, errorCallback, notifyCallback) 
  • promise が解決されると、 successCallbackが実行されます。
  • promise が拒否されると、 errorCallbackが実行されます。
  • 通知されると、 notifyCallbackが実行されます。

angular-ui のモーダルの場合、背景をクリックすると promise が拒否されます。これを念頭に置いて、コードを次のように変更できます。

dialog.result.then(function () {
  alert('Modal success at:' + new Date());
}, function () {
  alert('Modal dismissed at: ' + new Date());
});

ここで働くプランカーを見ることができます

于 2013-09-23T17:56:04.157 に答える
20

Angular 1.2 は、次のプロミスをサポートしていfinally(callback)ます。

dialog.result.finally(function() {
    alert('clean up resources');
});

ここで動作中のプランカーをチェックしてください。

于 2014-05-01T14:03:03.193 に答える