子路由

有時將檢視或路徑巢狀在另一箇中是有意義的。例如,在儀表板上,你需要多個子檢視,類似於選項卡,但通過路由系統實現,以顯示使用者的專案,聯絡人,訊息等。為了支援這種情況,路由器允許我們定義子路由。

首先我們從上面調整 RouterConfig 並新增子路徑:

import { ProjectsComponent } from '../components/projects.component';
import { MessagesComponent} from '../components/messages.component';

export const appRoutes: RouterConfig = [
  { path: '', pathMatch: 'full', redirectTo: 'login' },
  { path: 'dashboard', component: DashboardComponent,
    children: [
      { path: '', redirectTo: 'projects', pathMatch: 'full' },
      { path: 'projects', component: 'ProjectsComponent' },
      { path: 'messages', component: 'MessagesComponent' }
    ] },
  { path: 'bars/:id', component: BarDetailComponent },
  { path: 'login', component: LoginComponent },
  { path: 'signup',   component: SignupComponent }
];

現在我們已經定義了子路由,我們必須確保這些子路由可以在我們的 DashboardComponent 中顯示,因為那是我們新增子路徑的地方。以前我們已經瞭解到元件顯示在 <router-outlet></router-outlet> 標籤中。類似我們在 DashboardComponent 中宣告瞭另一個 RouterOutlet

import { Component } from '@angular/core';

@Component({
  selector: 'dashboard',
  template: `
    <a [routerLink]="['projects']">Projects</a>
    <a [routerLink]="['messages']">Messages</a>   
    <div>
      <router-outlet></router-outlet>
    </div>
  `
})
export class DashboardComponent { }

如你所見,我們新增了另一個 RouterOutlet,其中將顯示子路由。通常會顯示具有空路徑的路線,但是,我們設定了重定向到 projects 路線,因為我們希望在載入 dashboard 路線時立即顯示該路線。話雖這麼說,我們需要一個空路線,否則你會得到這樣的錯誤:

Cannot match any routes: 'dashboard'

因此,通過新增路徑(意味著路徑為空路徑),我們為路由器定義了一個入口點。