web-dev-qa-db-ja.com

同じURLが異なるパラメータでロードされたときにAngular2ルーター2.0.0がコンポーネントをリロードしませんか?

これは.routing.tsファイルにあります

export const routing = RouterModule.forChild([
{
    path: 'page/:id',
    component: PageComponent
}]);

PageComponentファイルはidパラメーターをチェックし、それに応じてデータを読み込みます。ルーターの以前のバージョンでは、/ page/4から/ page/25に移動すると、ページが「リロード」され、コンポーネントが更新されました。

Xがidである/ page/Xに移動しようとすると、最初にロードされるだけで、次にURLが変更されますが、コンポーネントは再び「リロード」されません。

コンポーネントを強制的にリロードし、ngOnInitイベントを呼び出すために渡す必要があるものはありますか?

12
Gillardo

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の変更をサブスクライブして、そこでコードを実行できます。

21

Angular 7.2、ルータ7.2では、次のことができます。

constructor(
    private router: Router
) {
    this.router.routeReuseStrategy.shouldReuseRoute = function(){
        return false;
    }  
}

私はいくつかの方法を試しましたが、それが私のナビゲート先のコンポーネントのコンテンツをルーターがロードする唯一の方法でした。

ルートの再利用戦略について詳しく読むことができます here

3
alaasdk