2017-08-25 7 views
1

私は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. 
} 

このモーダルウィンドウを使用してユーザーの入力を取得するにはどうすればよいですか?

ありがとうございます。

+0

userConfirmはグローバル変数です。私はモーダルウィンドウが動作することを確認できます。私はコード内の他の場所からアクティブにすることができますが、canDeactivate()ではできません – myroslav

+0

ここで同様の問題に対する私の解決策です:https://stackoverflow.com/questions/46433195/angular-use-modal-dialog-in-candeactivate-送信されなかったガードサービスの変更 – ShinDarth

答えて

0

私は剣道がどのように動作するかわからないが、ちょうど確認を使用している場合()あなたはそうのようなあなたのcanDeactivate()関数内の関数を返します:

canDeactivate() { 
    return confirm("Are you sure you want to navigate away?"); 
} 

あなたは()here canDeactivateについての詳細を読むことができます。

1

あなたの認証ガードからcomponent.canDeactivate();を実行すると、スコープが失われていると思います。これを代わりに試してください:

export class DeactivateGuard implements CanDeactivate<MyComponent> { 
    canDeactivate(component: MyComponent) { 
    return (() => component.canDeactivate())(); 
    } 
} 
+0

ダニエルに感謝しました。私は今モーダルウィンドウのポップアップを見ることができます。しかし、今すぐボタンをクリックすると、エラーが発生します。未定義の 'closeRow'プロパティを読み取ることができません。私はAngularがモーダルを示し、スコープを失うと思います。私は何とかスコープを最新の状態に保ち、ユーザー入力の結果を得て、その結果を提出する必要があります。何か案は? – myroslav

+0

'closeRow'プロパティはどこで定義され使用されていますか?私はどこにでもそれを見ることができません。私はプランカを持っていたいので、自分でテストすることができます... –

関連する問題