これは.routing.tsファイルにあります
export const routing = RouterModule.forChild([
{
path: 'page/:id',
component: PageComponent
}]);
PageComponent
ファイルはidパラメーターをチェックし、それに応じてデータを読み込みます。ルーターの以前のバージョンでは、/ page/4から/ page/25に移動すると、ページが「リロード」され、コンポーネントが更新されました。
Xがidである/ page/Xに移動しようとすると、最初にロードされるだけで、次にURLが変更されますが、コンポーネントは再び「リロード」されません。
コンポーネントを強制的にリロードし、ngOnInitイベントを呼び出すために渡す必要があるものはありますか?
update 2
この回答は、以前に廃止されたルーターバージョンのみです。
現在のルーターで行う方法については、 https://angular.io/api/router/RouteReuseStrategy をご覧ください。
update 1
これは、新しいルーターの https://github.com/angular/angular/pull/13124 によって修正されました(Angular 2.3)。これにより、カスタム再利用戦略を提供できます。
例についても参照してください https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx
オリジナル
https://github.com/angular/angular/issues/9811
これは既知の問題です。現在、パラメータのみのルート変更でルータにコンポーネントを再作成させる方法はありません。
最終的に再利用戦略を実装する計画について議論しました。
ngOnInit()
の代わりに、paramsの変更をサブスクライブして、そこでコードを実行できます。
Angular 7.2、ルータ7.2では、次のことができます。
constructor(
private router: Router
) {
this.router.routeReuseStrategy.shouldReuseRoute = function(){
return false;
}
}
私はいくつかの方法を試しましたが、それが私のナビゲート先のコンポーネントのコンテンツをルーターがロードする唯一の方法でした。
ルートの再利用戦略について詳しく読むことができます here