2017-06-05 9 views
0

ユーザーが何かを編集していて、詳細を保存せずにルートを変更しようとしている場合。編集中に詳細を保存せずにルートを変更するようにユーザーに確認する

この状態で、「あなたの変更は保存されていませんか?」というユーザーを変更したいと思います。ユーザーがコンポーネントにコンポーネントを破壊するのを防ぐことができますに応じて。

私はガードを試みますが、ngOnDestroyメソッドを実行する前にガードを実行します。 どうすればいいですか?

+0

?ボタンをクリックしますか? – Thiagz

+0

@Thiagzルートは、ヘッダーコンポーネントのナビゲーションバーまたはブラウザの戻るまたは進むボタンから変更できます。ユーザーが詳細を確認したり、コンポーネントの任意のフォームに保存したりしないようにするには、ユーザーにナビゲートまたは破棄する必要はありません。 –

+0

onclickイベントを使用して必要なメッセージをトリガーしないのはなぜですか? – Thiagz

答えて

0

私はCanDeactivateを同じ機能のために使用しており、うまく機能しています。

+0

複数のコンポーネントについて説明できますか? –

+0

これを実装するすべてのルートに対して、[YourDeactivateGuard]を追加して、CanDeactivateするだけです。あなたのCanDeactivateGuardで はこのような何か: '@Injectableを() エクスポートクラスDeactivateGuardはCanDeactivate { canDeactivate(コンポーネント:任意の)を実装{ //戻り値がTrueまたは条件 あたりの偽}がtrueを返す 。 } } ' –

+0

火災は一度だけ防御します。子供の親Gaurdへのナビゲート中に –

0

トリガーNavigationStart現在のルートを離れる前に仕事をするルータ。

constructor(private router: Router) { 
    .. 
    this.router.events.forEach((e: any) => { 
    if (e instanceof NavigationStart) { 
     // do confirm here. 
    } 
    }); 
} 
0

この目的で角度CanDeactivateを使用できます。またcanDeactivate角度

https://angular.io/docs/js/latest/api/router/index/CanDeactivate-interface.html https://blog.thoughtram.io/angular/2016/07/18/guards-in-angular-2.html

リンク https://rahulrsingh09.github.io/AngularConcepts/

AdvancedConcepts @作業例 - >ガードルート変更を行う方法

+0

ブラウザの戻るボタンをクリックするとGaurdが機能しません。 –

+0

試しているコードまたは同じコードを表示できますか? –

+0

'エクスポートクラスEditorGuardがCanDeactivate { コンストラクタ(プライベートcustomEmitterService:CustomEmitterService)を実装{} canDeactivate(成分:任意、currentRoute:ActivatedRouteSnapshot、currentStateの:RouterStateSnapshot){ IF(this.customEmitterService.isEditing){ LET確認:ブール= window.confirm( 'text'); if(確認){ this.customEmitterService。isEditing = false; trueを返します } else { falseを返します。 } } else { return true; } } } 'ここで –

関連する問題