Я разрабатываю одностраничное приложение, в котором может быть несколько реактивных форм, загруженных внутри одного шаблона. Есть уникальные маршруты, которые соединяются с этими компонентами формы. Это нормально, когда отображается одна форма, а другая не отображается, поскольку только один маршрут может соответствовать компоненту одновременно.
Для упрощения рассмотрим, что есть:
- две ссылки маршрутизатора - "просмотр" и "редактирование"
- два компонента -
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>