私はAngular2アプリケーションを持っています。そのコンポーネントの1つは、CanDeactivateインターフェイスを実装して、ページから離れたユーザーのナビゲーションを確認します。ここでは、ルートガードの実装です:Angular2アプリケーションでCanDeactivateでモーダル確認を表示する方法は?
export class DeactivateGuard implements CanDeactivate<MyComponent> {
canDeactivate(component: MyComponent) {
let can = component.canDeactivate();
return can;
}
}
そしてここでは、コンポーネントのコードは次のとおりです。
今canDeactivate() {
if (confirm("Are you sure you want to navigate away?")) {
return true;
}
else {
return false;
}
}
、私の代わりに、ブラウザの確認ボックスのカスタムモーダルウィンドウを表示したいです。私は、Telerikの剣道UIで、このようなウィンドウを構築しています:
<kendo-dialog title="Please confirm" *ngIf="userConfirm">
Are you sure you want to navigate away?
<kendo-dialog-actions>
<button kendoButton class="k-button" (click)="closeConfirm('no')">No</button>
<button kendoButton class="k-button" (click)="closeConfirm('yes')" primary="true">Yes</button>
</kendo-dialog-actions>
</kendo-dialog>
私はどこかのコードでuserConfirm =真を設定した場合は、このモーダルウィンドウはcanDeactivateで()メソッドを除き、動作します。
canDeactivate() {
this.userConfirm = true; //Does not work. The modal does not show up.
}
このモーダルウィンドウを使用してユーザーの入力を取得するにはどうすればよいですか?
ありがとうございます。
userConfirmはグローバル変数です。私はモーダルウィンドウが動作することを確認できます。私はコード内の他の場所からアクティブにすることができますが、canDeactivate()ではできません – myroslav
ここで同様の問題に対する私の解決策です:https://stackoverflow.com/questions/46433195/angular-use-modal-dialog-in-candeactivate-送信されなかったガードサービスの変更 – ShinDarth