如何为三个不同的视图添加 Angular 路由

How to add Angular routing for three distict views

我们正在将 AngularJS 1.8 应用程序迁移到 Angular 13,但我无法找到有关如何使用 Angular 路由创建三个不同视图的任何提示。观点是:

每个视图都有独特的布局,其中信息显示在单个 router-outlet 中。 app-component.html 只包含 <router-outlet></router-outlet>,我想将每个视图都放在这个插座内。

我定义了以下路由:

const routes = [
  { path: '',
    pathMatch: 'full',
    component: MainComponent,
    children: [
      { path: 'mainsub', component: MainSubComponent }
    ]
  },
  { path: 'onboarding',
    pathMatch: 'full',
    component: OnboardingComponent,
    children: [
      { path: 'onboardingsub', component: OnboardingSubComponent }
    ]
  },
  { path: 'monitor',
    pathMatch: 'full',
    component: MonitorComponent,
    children: [
      { path: 'monitorsub', component: MonitorSubComponent }
    ]
  }
];

MainComponent我想导航到第一个child:

constructor(private router:Router, private route:activatedRoute) {};

ngOnInit() {
  this.router.navigate(['mainsub'], {relativeTo:this.route});
}

然而,这失败了,因为路线 mainsub 未知。

我在这里错过了什么?

试试第一个孩子:

constructor(route: ActivatedRoute) {
  route.url.subscribe(() => {
    console.log(route.snapshot.firstChild.data);
   });
}

显然我错过了很多 ;)

在网上进行更多搜索后,我找到了 this 篇关于 pathMatch 用途的文章。简而言之,我需要使用以下路线(对于主视图):

const routes = [
{
  path: '', pathMatch: 'prefix', component: MainComponent,
  children: [
    { path: '', pathMatch: 'full', redirectTo: 'mainsub' },
    { path: 'mainsub', component: MainSubComponent }
  ]
};

这也消除了在 MainComponent 中添加路由器重定向的需要。

如果您希望监控和入职组件成为主要组件的子组件(出现在您的问题中),您可能必须这样做:

const appRoutes: Routes = [
  { path: '', redirectTo: 'main', pathMatch: 'full'},
  { path: 'main', component: MainComponent, children: [
      {path:'monitoring', component: MonitoringComponent, outlet: 'c'},
      {path:'onboard', component: OnBoardComponent, outlet: 'c'},
    ] },
];

那么你的路由器插座是这样的:

<router-outlet name="c"></router-outlet>

最后链接应该是:

<a [routerLink]="['/main', { outlets: { c: ['monitoring'] } }]">
   Monitoring
</a>

<a [routerLink]="['/main', { outlets: { c: ['onboard'] } }]">
   Onboard
</a>

让我知道它是否有效。