2016-07-18 20 views
1

私は現在フルページであり、その中にフォームを持っています$mdDialogを持っています。ユーザーがクリックをキャンセルすると$mdDialogはしかし、私は、ユーザーがブラウザのボタンをバックアップ、これは私が

backButtonWasClicked = function() } 
    $mdDialog.cancel(); 
} 
を行うために探しています何でクリックしたときにも $mdDialogを閉じたい

$mdDialog.cancel(); 

この関数を呼び出すことによって閉じられています

どうすればいいですか? $mdDialogmywebsite.com/page#dialogのように表示され、何らかの形でバックボタンをクリックすると、このハッシュが表示され、ダイアログを閉じてハッシュを削除できるようになったときに、URLにハッシュを入れることを考えました。それが最善の方法であるかどうかはわかりません。

どうすればよいですか?

+0

[AngularJS Material - Dialog Closeの電話番号 "戻る"ボタンを使用する可能性のある複製](http://stackoverflow.com/questions/28594555/angularjs-material-dialog-close-using-phone-back-button) – Blizwire

+0

@ Blizwireこの投稿はモバイルとは関係ありません。また、あなたの質問に提供された解決策は、私が持っていた問題を解決しません。 –

+0

リンクされた質問に対する答えはプラットフォームに依存しません。ユーザがデバイス上の物理的な「戻る」ボタンまたはブラウザの「戻る」ボタンをクリックしても同じ動作をします。この問題は、rootscopeの状態変更イベントをリッスンし、cancelメソッドをトリガすることによって同様に扱うことができます。 – Blizwire

答えて

2

私は同じ機能が欲しいと思っている人にとって、これに対する解決策を見出しました。

これは私が私の$mdDialogを作成し、コントローラに$locationを注入し、私の$mdDialog

$scope.showOrderFormOverlay = function (ev) { 
    $mdDialog.show({ 
     templateUrl: '/Partials/dialog.html', 
     parent: angular.element(document.body), 
     targetEvent: ev, 
     clickOutsideToClose: false, 
     escapeToClose: false, 
     fullscreen: true, 
     focusOnOpen: false, 
     onComplete: function() { 
      $('.md-dialog-container').addClass('fullscreen'); 
      $location.hash("this-can-be-whatever"); 
     } 
    }); 
}; 

を作成するコードです。次に、onComplete関数にこの行を追加しました。$location.hash("this-can-be-whatever")これにより、現在のURL mywebsite.com/pageにハッシュが追加されるため、$mdDialogを開いた後はmywebsite.com/page#this-can-be-whateverのようになります。その後

$mdDialogのコントローラの内部私はこれがURLからハッシュを削除し、$mdDialogを閉じます、

window.onpopstate = function() { 
    if (window.location.hash == "") { 
     $mdDialog.cancel(); // Cancel the active dialog 
    } 
} 

を、この機能を追加しました。

+0

-1この回答は、ユーザーの動作を追跡するために、window.locationハッシュを使用したハックを使用しているためです。ユーザーが状態を変更したとき(たとえば、ブラウザの戻るボタンをクリックして)のイベントが既に組み込まれています。適切な角度の解決方法については、私の答えをご覧ください。 – Blizwire

+0

@Blizwire、あなたのソリューションが見えないのはなぜですか? – azerafati

+0

@azerafati人々はそれを投票して削除しました。あなたが興味を持っているなら、とにかく答えはこのリンクを参照していました。 https://stackoverflow.com/questions/28594555/angularjs-material-dialog-close-using-phone-back-button/34844681#34844681 – Blizwire

関連する問題