Как обрабатывать несколько полностью динамических маршрутов в angular?

#angular #rxjs

#angular #rxjs

Вопрос:

У меня есть несколько маршрутов, в которых нет статических параметров, чтобы я мог добавить соответствующий компонент для этого маршрута, поэтому я могу легко перемещаться. Моя конфигурация маршрутов выглядит так:

 app-routing.module.ts:

const routes = {
  {path: '', component: MainPageComponent},
  {path: ':category', component: ListPageComponent},
  {path: ':productInfo', component: ProductComponent},
  {path: '404', component: PageNotFoundComponent},
  {path: '**', redirectTo: '404'}
};
 

Вначале я решил использовать распознаватель, чтобы сначала отправить запрошенный URL-адрес в api и выяснить, подходит ли URL-адрес как категория, и если это не так, я сделал еще один запрос к api, чтобы выяснить, подходит ли он как продукт. Но я думаю, что это неэффективно, пока я не передам информацию, отправленную мне api, компоненту, чтобы компоненту не нужно было делать еще один запрос, и именно поэтому я решил использовать resolver.
Я также хотел обрабатывать неправильные маршруты, поэтому, если эти 2 запроса к api были неверными, я хотел перенаправить пользователя на страницу 404. Но я не смог подключить соответствующий компонент для маршрута в распознавателе.
Любой совет или решение, как это сделать?

ОБНОВЛЕНИЕ: @Abhijeet Raj, спасибо за ваш ответ. В настоящее время мы изменили способ определения наших маршрутов, и в итоге это выглядит так: {path: ':category/:slug', component: ProductComponent}, {path: ':category/:brand1/:brand2/:brand3/...', component: ListPageComponent} в этой ситуации, когда у меня есть: «:category /brand1», он перейдет к ProductComponent вместо ListPageComponent, как я могу решить эту проблему?

Но когда у меня есть что-то вроде: ‘: category /: brand1 /: brand2’, из-за наличия более двух параметров в URL, я могу использовать UrlMatcher.

Ответ №1:

Насколько я понял вашу проблему, :category и :productInfo здесь они ничем не отличаются, оба будут открывать один и тот же компонент. Если вы передадите какую-либо динамическую категорию или информацию о продукте в маршруте, она перейдет только к первому маршруту, указанному в массиве маршрутов, т.Е. :category . Вам нужно будет каким-то образом дифференцировать свои маршруты, например :-

 category/:categoryId
 

и

 product/:productId
 

Таким образом, оба могут ссылаться на разные компоненты.