Угловой 2 дополнительный параметр маршрута
возможно ли иметь дополнительный параметр маршрута в угловом маршруте 2? Я попробовал угловой 1.синтаксис X в RouteConfig, но получил ниже ошибки:
"исходное исключение: путь" /user/: id?"содержит "?"что не допускается в конфигурации маршрута."
@RouteConfig([
{
path: '/user/:id?',
component: User,
as: 'User'
}])
7 ответов:
вы можете определить несколько маршрутов с параметром и без него:
@RouteConfig([ { path: '/user/:id', component: User, name: 'User' }, { path: '/user', component: User, name: 'Usernew' } ])и обрабатывать необязательный параметр в компоненте:
constructor(params: RouteParams) { var paramId = params.get("id"); if (paramId) { ... } }см. также связанный с github Вопрос:https://github.com/angular/angular/issues/3525
рекомендуется использовать параметр запроса, когда информация является необязательной.
параметры маршрута или параметры запроса?
нет никаких жестких правил. В общем,
предпочтите параметр маршрута, когда
значение.
- значение необходимо, чтобы отличить один путь от другого маршрута.
предпочитаю параметр запроса, когда
- значение является необязательным.
- значение является сложным и/или многомерной.
от https://angular.io/guide/router#optional-route-parameters
вам просто нужно вынуть параметр из пути маршрута.
@RouteConfig([ { path: '/user/', component: User, as: 'User' }])
{path: 'users', redirectTo: 'users/'}, {path: 'users/:userId', component: UserComponent}таким образом, компонент не будет повторно отображаться при добавлении параметра.
Angular 4-решение для решения проблемы упорядочения необязательного параметра:
СДЕЛАЙ ЭТО:
const appRoutes: Routes = [ {path: '', component: HomeComponent}, {path: 'products', component: ProductsComponent}, {path: 'products/:id', component: ProductsComponent} ]отметим, что
productsиproducts/:idмаршруты называются точно так же. Угловой 4 будет правильно следоватьproductsдля маршрутов без параметра, и если параметр будет следоватьproducts/:id.однако путь для непараметрического маршрута
productsдолжны не есть косая черта, в противном случае угловой будет неправильно рассматривать его как параметр-путь. Поэтому в моем случае у меня была косая черта для продуктов, и она не работала.НЕ ДЕЛАЙ ЭТОГО:
... {path: 'products/', component: ProductsComponent}, {path: 'products/:id', component: ProductsComponent}, ...
С angular4 нам просто нужно организовать маршруты вместе в иерархии
const appRoutes: Routes = [ { path: '', component: MainPageComponent }, { path: 'car/details', component: CarDetailsComponent }, { path: 'car/details/platforms-products', component: CarProductsComponent }, { path: 'car/details/:id', component: CadDetailsComponent }, { path: 'car/details/:id/platforms-products', component: CarProductsComponent } ];это работает для меня . Таким образом, маршрутизатор знает, что такое следующий маршрут на основе параметров идентификатора опции.
ответ ререза довольно хорош, но у него есть один серьезный недостаток. Это вызывает
Userкомпонент для повторного запускаngOnInitметод.это может быть проблематично, когда вы делаете некоторые тяжелые вещи там и не хотите, чтобы он был повторно запущен при переключении с непараметрического маршрута на параметрический. Хотя эти два маршрута предназначены для имитации необязательного параметра url, а не становятся 2 отдельными маршрутами.
вот что я предлагаю решить проблема:
const routes = [ { path: '/user', component: User, children: [ { path: ':id', component: UserWithParam, name: 'Usernew' } ] } ];затем вы можете переместить логику, ответственную за обработку param в
UserWithParamкомпонент и оставить базовый логикаUserкомпонент. Что бы вы ни делали вUser::ngOnInitне будет работать снова, когда вы переходите от / user до / user / 123.не забудьте поставить
<router-outlet></router-outlet>на 'ы.
столкнулся с другим экземпляром этой проблемы, и в поисках решения он пришел сюда. Моя проблема заключалась в том, что я делал детей, а также ленивую загрузку компонентов, чтобы немного оптимизировать вещи. Короче говоря, если вы ленивы загрузки родительского модуля. Главное, что я использовал'/: id 'в маршруте, и это жалобы на то, что' / ' является его частью. Не проблема здесь, но это относится.
приложение-маршрутизация от родителя
... const routes: Routes = [ { path: '', children: [ { path: 'pathOne', loadChildren: 'app/views/$MODULE_PATH.module#PathOneModule' }, { path: 'pathTwo', loadChildren: 'app/views/$MODULE_PATH.module#PathTwoModule' }, ...дочерние маршруты ленивые загружено
... const routes: Routes = [ { path: '', children: [ { path: '', component: OverviewComponent }, { path: ':id', component: DetailedComponent }, ] } ]; ...
Comments