0

私はCanDeactivateガードを作成しようとしています。ルートから離れてナビゲートするときにユーザーに「変更を保存」するよう促します。除外したいルートがいくつかあります(ユーザーがタブを切り替えても、新しいアイテムを選択しないと言うことができます)。私は、何らかのナビゲーションサービスを使わずに目的地のURLを取得し、そこに完全なURLを保持する方法を理解することに本当に苦労しています。ここで私の署名は無効にすることができますAngular2 Guardで目的地のURLを取得するにはどうすればよいですか?

// This is what handles the deactivate 
public canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { 

'route'オブジェクトと 'state'オブジェクトのすべてには、前のURLと宛先URLに関する情報が含まれていません。

私はあなたがルータのイベントを購読することができます

this._router.navigate(['/clients', this.selectedClient.id, page]); 

答えて

1

で別のコンポーネントでナビゲーションをトリガー:あなたは目的地をつかむことができるように

NavigationStartは、CanDeactivate前に発火する必要があります。さておき、私はCanDeactivateに先を知る必要だと思い

は、設計上の欠陥の一種です。しかし、私はあなたのアプリを知らないので、これは実際に正しい方法かもしれません。

+0

あなたは、おそらくそれは設計上の欠陥だった、正しいです。私は、もう少し彼らと一緒に作業した後、ガードをよく理解していると信じていますが、コンポーネントツリーとルーティングされた子供に基づいてどのようにトリガするかはまだ分かりません:) – ZeroCool

2

実際には、宛先状態はCanDeactivateのパラメータの1つです。

canDeactivate(
    component: CanComponentDeactivate, 
    route: ActivatedRouteSnapshot, 
    currentState: RouterStateSnapshot, 
    nextState: RouterStateSnapshot 
    ): Observable<boolean>|Promise<boolean>|boolean { 

    return true; 
} 

参考:https://angular.io/api/router/CanDeactivate

関連する問題