如何让 Aurelia 准确匹配路线?

How do I make Aurelia match routes exactly?

我正在尝试使用 Aurelia 制作一个简单的应用程序,但我不喜欢我的路由在末尾匹配带有额外内容的 url。

我的路由器配置是:

configureRouter(config, router) {
  config.title = 'Aurelia';
  config.map([
    { route: '', redirect: 'players' },
    { route: 'players', name: 'players', moduleId: 'components/players/players', nav: true, title: 'Players' }
  ]);
  this.router = router;
}

我只想 #/players 路由到播放器组件。我怎样才能避免像 #/players/extra/url 这样的东西也被路由?

这就是 route-recognizer 的工作方式。一旦找到完全匹配的叶路由,它就会停止查看 url 的其余部分。相反,如果你有另一条路线 #/players/foo,那么 #/players/extra 会给你一个错误 Route not found: extra.

考虑到这一点,您可以添加一个带有子路由匹配器的额外路由配置来捕捉额外的部分:

{ route: 'players/*path', redirect: 'players' }

然后,用户在 #/players/ 之后添加的任何内容都将被简单地删除,并且他们仍会在该页面结束。

尽管如此,但要小心,因为它会破坏您可能拥有的任何子路由,并且这可能不是用户期望的行为。即使在堆栈溢出时,您也可以在地址栏中添加 /extra/stuff 并登陆同一页面。