2016-08-21 14 views
4

ブラウザで[戻る]ボタンまたは[進む]ボタンをクリックしたときにルートの変更をキャンセルしたいとします。 は、これまでのところ、私は以下のコードのように、経路変更イベントをキャプチャするために管理します。角度2の経路変更をキャンセルするにはどうすればよいですか?

constructor(router:Router) { 
    router.events 
    .subscribe((event:Event) => { 
     // some logic. 
     // event.preventDefault(); ? 
    }); 
} 

私はイベントのデフォルトを停止する場合のいずれかの方法/メンバーを見つけることができませんでした。私はlocation.go()を使ってURLを変更しているので、意図した通りに登録されたルート設定がないので、コンソールでこのエラーが発生します。

経路の変更をキャンセルする方法はありますか。そのため、Angularは経路の設定を見ませんか?

+0

次のことができ、これをどこ解決するために、以下のようなものですか? –

答えて

8

経路を定義するときにcanDeactivateガードを使用することができます。これは、経路を変更するときに論理を書くのに役立ちます。

ルートのナビゲーションを続行するか拒否するかに基づいて、trueまたはfalseを返すだけでなく、そのルートでアクティブなコンポーネントインスタンスへの参照を取得して、そのプロパティを読み取ることができます。この方法の

署名が

canDeactivate(component: T, 
    route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot) : 
    Observable<boolean>|Promise<boolean>|boolean 

あなたはそれについての詳細を読むことがhere

関連する問題