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メソッドは、.openメソッドの多くのプロパティの1つである.closedでチェーン化できる約束を返します。

私はそれをテストしたところ、モーダルが閉じた後でアラートを表示し、閉じている間はアラートを表示しません。

ここ戻りセクション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

は、私はあなたのソリューションを試みたが、まだそれは働いていないです参照してください - 私が取得する」ことができない例外を取得していますプロパティ '、'未定義またはnull参照 'のいずれかです。オープンメソッドによって返される約束のために、何らかの形で定義されていないプロパティ 'closed'のようです。 –

+2

Nope。コードからmodalInstance.result.then ...を削除します。 – Srijith

+0

これを行うには、$ uibModalInstance.close( 'cancel')を使用してポップアップを閉じる必要があります。解除機能は使用しません。 –