たぶん、他のすべての答えは角度2.Xに対するものです。
現在、Angular5.Xでは機能しません。私はそれを使っています。
NavigationEndのみでは、以前のURLを取得できません。
ルーターは「NavigationStart」、「RoutesRecognized」、...から「NavigationEnd」まで機能するためです。
で確認できます
router.events.forEach((event) => {
console.log(event);
});
ただし、「NavigationStart」を使用しても以前のURLを取得することはできません。
次に、ペアワイズを使用する必要があります。
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/pairwise';
constructor(private router: Router) {
this.router.events
.filter(e => e instanceof RoutesRecognized)
.pairwise()
.subscribe((event: any[]) => {
console.log(event[0].urlAfterRedirects);
});
}
ペアワイズを使用すると、URLの送信元と送信先を確認できます。
「RoutesRecognized」は、起点からターゲットURLへの変更ステップです。
だからそれをフィルタリングし、それから前のURLを取得します。
最後だが大事なことは、
このコードを親コンポーネント以上(例:app.component.ts)に配置します
このコードはルーティングの終了後に起動するためです。
角度6+を更新
events.filter
フィルタはイベントの一部ではないため、はエラーになります。コードを次のように変更してください。
import { filter, pairwise } from 'rxjs/operators';
this.router.events
.pipe(filter((evt: any) => evt instanceof RoutesRecognized), pairwise())
.subscribe((events: RoutesRecognized[]) => {
console.log('previous url', events[0].urlAfterRedirects);
console.log('current url', events[1].urlAfterRedirects);
});