我正在开发一个单页应用程序,其中可以在单个模板中加载多个反应式表单。有独特的路线连接到这些表单组件。可以当显示一个表单时不显示另一个表单,因为一次只有一个路由可以匹配到一个组件。
为了简化,让我们考虑有:
- 两个路由器链接 - “查看”和“编辑”
- 两个组件 -
ViewComponent
和EditComponent
- 两个路由器插座 -在页面
viewOutlet
上editOutlet
相邻显示。
单击“视图”链接时,必须将 ViewComponent 加载到 viewOutlet 内,单击“编辑”链接时,必须将 EditComponent 加载到 editOutlet 内。在这里,当显示 viewComponent 时,editOutlet 为空是可以接受的,反之亦然。
我还在这里创建了一个 stackblitz -
预览- https://angular-pbyijh.stackblitz.io/app/main
代码- https://stackblitz.com/edit/angular-pbyijh
我已根据文档进行了所有代码更改。但是我收到错误消息Cannot match any routes. URL Segment: 'view'
你可能会问我为什么使用路由器插座来显示简单的组件。原因是这个 stackblitz 只是我现实世界应用程序的一个最简单的复制品。我的应用程序中的组件具有表单。当表单很脏并且用户尝试离开它时,我将显示确认“您要放弃更改”。据我所知,如果不涉及路线,这是无法完成的。
代码如下:
app.routing.module.ts
const routes: Routes = [
{
path:'',
component: AppComponent
}, {
path:'app',
loadChildren: './main-app/main-app.module#MainAppModule',
}
];
main-app.routing.module.ts
const routes: Routes = [
{
path: '',
pathMatch: 'full',
redirectTo: 'main'
}, {
path: 'main',
component: MainAppComponent,
children: [
{
path: 'view',
component: ViewComponent,
outlet: 'viewOutlet'
}, {
path: 'edit',
component: EditComponent,
outlet: 'editOutlet'
}
]
}
];
main-app.component.html中的路由器出口段
<div class="parent">
<div class="block">
<router-outlet name="viewOutlet"></router-outlet>
</div>
<div class="block">
<router-outlet name="editOutlet"></router-outlet>
</div>
</div>