0

私はAngularMaterialの$ mdDialogサービスを使用しています。ここで私が使用していますサンプルコードだ -コールバックonRemovingのボタン値を取得

var highlighter = {}; 
$mdDialog.show({ 
    templateUrl: 'sample.html', 
    parent: angular.element(document.body), 
    clickOutsideToClose: true, 
    bindToController: true, 
    onRemoving: function (event, removePromise) { 
     if(highlighter.answer!==1) { 
      //Do something here 
     } 
     highlighter.answer = undefined; 
    } 
}) 
.then(function (answer) { 
    highlighter.answer = answer; 
}); 

show()メソッドによって返される約束はmdDialogのボタンのいずれかがクリックされたときにのみ解決します。ボタンのインデックスは、answerパラメータとして提供されます。回答/ボタンのインデックスが1でない場合にのみ何かをする必要があります。highlighter.answerは、ボタンがクリックされたときに約束を解決する前にonRemovingが呼び出されているので、適切な値を取得できませんでした。必要(OnRemovingコールバックで)。

つまり、いずれかのボタンが呼び出されるたびに、またはボタンをクリックせずにダイアログが閉じられたときに、onRemovingが呼び出されます。約束は、ボタンがクリックされたときにのみ解決されます。

私の質問は、応答値が設定され、ボタンが呼び出されたかどうかを知るために、約束が解決された後に呼び出されるコールバックを持つ方法があるかどうかです。このコールバックは、プロミスが解決されたかどうかにかかわらず、ダイアログを削除するときに呼び出されます。

+0

閉じる/解除ボタンを使用せずにダイアログを作成する方が簡単ですか?私はあなたが使用しているライブラリを知らないが、私はどこかの選択肢は確信しています。もう一つの選択肢は、答えが選択されるまでダイアログをもう一度スローすることです。 – Halcyon

+0

@Halcyon外出先をクリックするだけでDislogが解除されることは明らかではないので、却下ボタンが必要です。 2番目の提案は悪いUXデザインのように聞こえます。 – noob

答えて

0

mdDialogは約束のためにqライブラリを使用しており、それにはfinallyアクションもあります。私はちょうどfinallyアクションを追加して、そこにonRemovingコードを入れなければなりませんでした。その後、リスナーonRemovingを削除できました。最終的なコードこのように見えた -

$mdDialog.show({ 
    templateUrl: 'app/modules/hire/common/views/annotation.html', 
    parent: angular.element(document.body), 
    clickOutsideToClose: true, 
    bindToController: true 
}).then(function (answer) { 
    highlighter.answer = answer; 
}).finally(function() { 
    if(highlighter.answer!==1) { 
     //Do something here 
    } 
    highlighter.answer = undefined; 
}); 

This answerは解決策を見つけることに私を助けました。

関連する問題