Angular 2 子路由

示例

有时,将视图或路线相互嵌套是有意义的。例如,在仪表板上,您希望多个子视图(类似于选项卡,但通过路由系统实现)来显示用户的项目,联系人,消息集。为了支持这种情况,路由器允许我们定义子路由。

首先,我们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>标签中。类似的,我们声明另一个RouterOutlet在DashboardComponent:

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'

因此,通过添加路由(即具有空路径的路由),我们为路由器定义了入口点。