Angular 2可选的路由参数

是否有可能在Angular 2路由中有一个可选的路由参数? 我尝试了RouteConfig中的Angular 1.x语法,但收到下面的错误:

“原始exception:path”/ user /:id?“包含路由configuration中不允许的”?“。

@RouteConfig([ { path: '/user/:id?', component: User, as: 'User' }]) 

您可以使用和不使用参数定义多个路由:

 @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

信息是可选的时,build议使用查询参数。

路由参数或查询参数?

没有硬性规定。 一般来说,

比较喜欢路由参数

  • 该值是必需的。
  • 该值是区分一条path与另一条path所必需的。

比较喜欢查询参数

  • 该值是可选的。
  • 该值是复杂的和/或多variables的。

https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters

你只需要从pathpath中取出参数。

 @RouteConfig([ { path: '/user/', component: User, as: 'User' }]) 

使用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 } ]; 

这对我有用。 这样路由器就知道基于option id参数的下一个路由是什么。

Angular 4 – 解决可选参数sorting的解决scheme:

做这个:

 const appRoutes: Routes = [ {path: '', component: HomeComponent}, {path: 'products', component: ProductsComponent}, {path: 'products/:id', component: ProductsComponent} ] 

请注意,“products”和“products /:id”路线的命名完全相同。 Angular 4会正确地跟随没有参数的路由的“产品”,如果一个参数跟随“products /:id”。

但是,非参数路由“产品”的path不能有斜线,否则会被错误地视为参数path。 所以在我的情况下,我有产品的尾部斜线,它不工作。

不要这样做:

 ... {path: 'products/', component: ProductsComponent}, {path: 'products/:id', component: ProductsComponent}, ...