Angular 4には、理解できないルーティングの基本的な概念があります。
index.html:
<base href="/">
ファイル構造:
- app
|- app.routings.ts
|- collections
|-- collection.component.ts
|-- collection.component.html
|-- collectioninfo.component.ts
|-- collectioninfo.component.html
|- shared
|-- header.component.html
|-- header.component.ts
Header.component.htmlにリンクがあります:
<a class="nav-link" [routerLink]="['/collections']">
Collections
</a>
これをクリックすると、localhost:4200/collectionsに移動します。ボタンがクリックされると、URLがプログラムで変更されます(collection.component.ts内):
this.router.navigate(['/collections/', collection.name]);
私はlocalhost:4200/collections/nameに行き着きます-大丈夫です。プログラムで/ collections(collectioninfo.component.ts内)に戻りたいと思います:
this.router.navigate(['/collections']);
しかし、それはうまくいきません。 URLは変更されず、パラメーターを読み込めなかったというエラーが表示されます。そのため、/ collections/nameが再度読み込まれているようです。パスの問題かもしれませんが、次のようなことも機能しません。
this.router.navigate(['../collections']);
追加情報:/ collectionsで手動でページを再読み込みすると、再びホームページに転送されますが、これは別の問題であり、この動作とは関係ありません。
app.routing.ts:
const APP_ROUTES: Routes = [
...
{ path: 'collections', component: CollectionComponent },
{ path: 'collections/:id', component: CollectionInfo },
];
私のfirebaseコードがめちゃくちゃになっていることがわかります-それは別のルートに行く前にページをリロードしようとします。以前のルートから引き渡された一部のパラメーターが欠落していたため、これによりエラーが発生しました。
export const routing = RouterModule.forRoot(APP_ROUTES, { enableTracing: true })
app.routing.tsはデバッグに非常に役立ちました。
相対パスthis.router.navigate(['../collections']);
で、_localhost:4200/collections/collections
_に移動しようとしています。 this.router.navigate(['../']);
をお試しください
これが機能しない場合は、ActivatedRouteをrelativeToパラメーターとして指定します。
_constructor(route: ActivatedRoute, router: Router) {}
navigate() {
this.router.navigate(['../'], { relativeTo: this.route });
}
_
relativeTo
は、指定したエントリに関連するパスを作成することで機能します。必ずしも現在のルートである必要はありません。