如何实现angular2嵌套组件路由,而不在url路径中添加额外的斜杠

时间:2015-12-31 10:33:56

标签: angular angular2-routing

我使用angular2构建单页应用程序,它需要根据应用程序的路由呈现不同的应用程序模板。在最高级别,它应该能够在主应用程序模板和应用程序的管理模板之间切换。

路由规则:

  • 如果网址路径以/ auth开头,那么它将由AuthApp处理
  • 如果它以其他任何东西开头,则应由MainApp处理

实施

为了实现这一点,我有一个最高级别的组件应用程序,它将责任委托给AuthApp或MainApp,就像这样。

@RouteConfig([
  {
    path: '/auth/...',
    component: AuthApp,
    as: 'Auth'
  },
  {
    path: '/...',
    component: MainApp,
    as: 'Main'
  }
])

然后每个子应用程序(例如AuthApp,MainApp)都有自己的路由定义,例如此。

@RouteConfig([
  { path: '/current-vacancies', CurrentVacancies, as: 'CurrentVacancies', useAsDefault: true },
  { path: '/candidates/create', CandidateCreate, as: 'CandidateCreate'},
  ...
])

从功能上来说,从设计的角度来看,这非常有用!

问题:

在主应用中,应用程序的路径配置没有指定路径(例如/... => MainApp)我不想要嵌套的url路径。例如,如果您通过应用程序(routerLink)导航到CurrentVacancies,它会更新网址并预先添加额外的不需要的正斜杠。当我希望它读取.../#//current-vacancies时,网址路径现在就像这个.../#/current-vacancies

当您在地址栏中键入.../#/current-vacancies时,应用程序路由实际工作正常,它会正确转换。然而,通过应用程序routerLink指令进行导航会预先添加不需要的正斜杠。

我从逻辑上理解为什么会发生这种情况,委托给MainApp的根组件的路径为' /'并且它与它的子组件连接在一起形成一个完整的url路径。但在这种情况下,不希望有额外的斜线。任何想法我如何删除它,或以某种方式覆盖此行为。

顺便说一下,我考虑过将MainApp组件路由移到最高级别,尽管这确实解决了我报告的网址路径问题,但它不允许我在顶层切换模板

总结

请帮助我,

  • 如何删除主应用路由/
  • 上不需要的"preferred option"
  • 设计应用程序如何使用嵌套组件路由提供可切换的顶级模板。

由于

1 个答案:

答案 0 :(得分:2)

今天有效(Angular 4),似乎在Angular 2决赛发布之前已经修复。