У меня есть приложение Angular 5, в котором мне нужен URL-адрес для использования следующей формы:
www.example.com/#/company/<companyId>/transactions
Я использую безымянную розетку маршрутизатора <router-outlet></router-outlet>
Идентификатор компании — это параметр. Сначала я отключил часть транзакций в маршрутизаторе и убедился, что могу правильно перейти на страницу транзакций, связанную с компонентом CompanyTransactionsComponent.
Правило маршрутизатора было таким:
www.example.com/#/company/<id>/
{ path: 'company/:companyId', component: CompanyTransactionsComponent }
this.router.navigateByUrl('/company/' + user.companyId);
который работал нормально, но когда я добавил /transactions:
www.example.com/#/company/<id>/transactions/
{ path: 'company/:companyId/transactions', component: CompanyTransactionsComponent }
this.router.navigateByUrl('/company/' + user.companyId + '/transactions/');
Это выдавало мне ошибку Cannot match any routes.
, поэтому я попробовал несколько других вариантов ниже:
{
path: 'company/:companyId',
component: CompanyTransactionsComponent,
children: [
{
path: 'transactions',
component: CompanyTransactionsComponent
}
]
},
а также:
RouterModule.forRoot([
{ path: 'company/:companyId', component: CompanyTransactionsComponent }
],
RouterModule.forChild([
{
path: 'company/:companyId',
children: [
{
path: 'transactions',
component: CompanyTransactionsComponent
}
]
},
])
Оба дают одну и ту же ошибку. Кажется, это происходит только потому, что я использую /transactions после параметра /:companyId. Любая идея, как я могу создать подстраницу, следующую за параметром в URL-адресе?
EDIT CompanyTransactionsComponent используется как для родительского, так и для дочернего компонентов, поскольку еще нет CompanyHomeComponent, поэтому страница транзакций будет страницей по умолчанию, если не введена ни одна подстраница. Помимо CompanyTransactionsComponent, я не учел несколько дочерних элементов, чтобы сделать код короче.