【问题标题】:# in paramertized route breaks Aurelia routes# 在参数化路由中中断 Aurelia 路由
【发布时间】:2017-02-14 17:47:15
【问题描述】:

我们有示例应用程序,其路由器配置定义如下。用户详细信息路由中的“id”参数可以在其值中包含#,例如/users/#abc。我们可以毫无问题地从“id”为#abc 的用户视图导航到用户详细信息视图。但是,当刷新详细信息页面时,它会返回到用户视图。有没有办法转义字符“#”?

export class App {
  configureRouter(config, router) {
    this.router = router;
    config.title = 'Aurelia';
    config.map([
      { route: ['', 'home'],       name: 'home',       moduleId: 'home/index' },
      { route: 'users',            name: 'users',      moduleId: 'users/index',   nav: true },
      { route: 'users/:id', name: 'userDetail', moduleId: 'users/detail' }
    ]);
  }
}

【问题讨论】:

标签: aurelia


【解决方案1】:

由于没有对模板参数进行编码/解码,因此它们具有很大的限制性。基本上,这意味着[a-zA-Z0-9_]。请注意,这不是来自文档,而是我的观察。

如果您需要传递任意数据,只需使用查询参数即可。为此,设置路由器定义模板参数。

export class App {
  configureRouter(config, router) {
    this.router = router;
    config.title = 'Aurelia';
    config.map([
      { route: ['', 'home'],       name: 'home',       moduleId: 'home/index' },
      { route: 'users',            name: 'users',      moduleId: 'users/index',   nav: true },
      { route: 'user', name: 'userDetail', moduleId: 'users/detail' }
    ]);
  }
}

您不必更改任何其他内容(导航,激活中的参数等)。这样,导航时,它将变成查询参数:

router.navigateToRoute('userDetail', { id: '#user123' });

这将导致 url:http://myserver/#user?id=%23user123

【讨论】:

  • 这是一个不错的选择。但是,我们的应用程序在 userDetail 下确实有更多的子路由。我想我可以对 id 进行 base64 编码。这将解决问题。
  • 没关系,如果路由user有自己的子路由,查询时会加参数。缺点是它位于 URL 的末尾。我知道,按照层次结构更容易理解:user/myUser/childroute vs. user/childRoute?userId=myUser
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多