【问题标题】:Angular 2 rc5 router match X subcategoriesAngular 2 rc5 路由器匹配 X 子类别
【发布时间】:2017-01-02 03:50:36
【问题描述】:

在 Angular 2 rc5 中使用新的路由器并且有一个公共路由,我不确定如何编写。

我需要一个类似这样的网址:

http://localhost:3000/store/{category}/{product-name}

这似乎很简单,直到我补充说我正在寻找可能有多个子类别,例如(我们不知道可能有多少):

http://localhost:3000/store/{category 1}/{sub category 2}/{sub category 3}..../{product-name}

如何创建与子类别和产品匹配的路径。除了“完整”之外,它是否以某种方式使用 pathMatch?

标准 app.routing.ts

    const appRoutes: Routes = [
        { 
          path: '/store/:cat', 
          component: CategoryComponent 
        },
        { 
          path: '/store/:cat/:product', 
          component: ProductComponent
        }
    ];

【问题讨论】:

  • 请参阅下面的@Godfather 解决方案。让我印象深刻的是应用程序组件的路由器出口,然后是辅助组件中的第二个路由器出口,允许提供和收集子路由。然后使用 ActivatedRoutes,您可以确定更多数据,例如 urlSegments,并使用您喜欢的方法来实现此解决方案。

标签: angular angular2-routing


【解决方案1】:

试试下面的代码:

 const appRoutes: Routes = [
     { 
       path: 'store', 
       component: StoreHomeComponent,
       children: [
         {
          path: '**',
          component: ProductComponent
         }]
     }];

StoreHome组件:

    @Component({
       template: '<router-outlet></router-outlet>'
    })
    export class StoreHomeComponent {}

这段代码也没有经过测试,但它应该可以工作

【讨论】:

  • 感谢@Godfather,这似乎也不起作用。似乎也无法让通配符在这种情况下或在儿童下或以子路由/子模块方式工作。
  • @lostincode 我更新了我的答案,希望这个工作顺利:)
  • 嘿@Godfather 没有任何运气让通配符在除根以外的任何地方工作。到目前为止,我能看到的唯一方法是在路由中使用通配符,然后使用 activateRoute 并检查 URL,然后在其中放置一个开关以检查 urlSegments 是什么......这基本上是在路由器之上再次构建自己的路由器....肯定有比这更好的方法吗?
  • 是的,你这样做的方式有效,但它很混乱。你能给我上面的方法显示的错误信息吗?
  • 对!知道了!好的,所以在这种方法中,我们有效地拥有位于应用程序组件中的路由器出口来为 storeHomeComponent 提供服务,而 storehomecomponet 实际上是一个包装器,其中包含另一个路由器出口来为 productcomponent 提供服务(它可以使用激活的路由来确定如何处理该地址)。我错过了 StoreHomeComponent 中的包装路由器插座!谢谢@Godfather,你拯救了我的一天!
猜你喜欢
  • 2016-12-19
  • 2017-01-21
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2016-12-30
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多