Угловая маршрутизация с подстановочным знаком сегмента - PullRequest
0 голосов
/ 08 мая 2018

Я настраиваю маршрутизацию для приложения Angular 6 и хочу иметь маршрут, который может соответствовать переменному количеству сегментов. В настоящее время у меня есть конфигурация маршрута, которая выглядит следующим образом:

const routes: Routes = [
  { path: '', redirectTo: '/catalog', pathMatch: 'full' },
  { path: 'login', component: LoginFormComponent },
  { path: 'catalog', component: CatalogComponent, canActivate: [SessionGuard] },
  { path: 'repo/:name', component: RepositoryComponent, canActivate: [SessionGuard] }
];

Это соответствует URL-адресу, подобному repo/test, и отправляет его на RepositoryComponent, но repo/foo/bar вызывает ошибку:

ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'repo/foo/bar'
Error: Cannot match any routes. URL Segment: 'repo/foo/bar'
    at ApplyRedirects.push../node_modules/@angular/router/fesm5/router.js.ApplyRedirects.noMatchError (router.js:1341)

Я привык к соглашению в ASP.NET MVC, которое позволяет мне объявлять маршрут следующим образом:

[HttpGet("repo/{*name}")]

Что будет соответствовать repo/test и repo/foo/bar и помещать все после первой косой черты (test или foo/bar) в аргумент name. Есть ли способ получить эквивалентное поведение с Angular?

1 Ответ

0 голосов
/ 09 мая 2018

Видимо, нет встроенного способа сделать это.Я закончил с настройкой маршрутизации, подобной этой:

const routes: Routes = [
  { path: '', redirectTo: '/catalog', pathMatch: 'full' },
  { path: 'login', component: LoginFormComponent },
  { path: 'catalog', component: CatalogComponent, canActivate: [SessionGuard] },
  { path: 'repo', component: RepositoryComponent, canActivate: [SessionGuard], children: [{
    path: '**', component: RepositoryComponent
  }] }
];

, которая обрабатывает маршрутизацию запросов, но не оценку параметров.Чтобы получить сегменты, совпадающие с подстановочным знаком **, мне нужно прокрутить введенный объект Router на моем RepositoryComponent:

getRepo(): void {
  this.Name = this.route.snapshot.children[0].url.join('/');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...