2017-02-09 64 views
1

我们有一个路由器配置示例应用,定义如下。用户详细信息路由中的“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' } 
    ]); 
    } 
} 
+0

这似乎是路由器中记录的错误。见https://github.com/aurelia/router/issues/424和https://github.com/aurelia/router/issues/435 –

回答

0

由于模板参数没有被编码/解码,所以它们的限制性很强。基本上这意味着[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

+0

这是一个很好的选择。但是,我们的应用程序在userDetail下有更多的子路由。我想我可以base64编码的ID。这将解决问题。 – Monica

+0

无关紧要,如果路由'用户'有它自己的子路由器,参数将被添加到查询中。缺点是它位于URL的末尾。 我知道,遵循层次结构更容易理解: 'user/myUser/childroute'与'user/childRoute?userId = myUser' – balazska