我正在使用pushState进行路由,而我的页面则来自www.mydomain.com/thepage
。适当的路线看起来像www.mydomain.com/thepage/home
,www.mydomain.com/thepage/user/{userId}
等。
因此,我已将base
标记设置在索引文件中,路由器config.options.root
设置为/thepage
。
一切都按预期工作(路由,路由器视图的生成链接等)。
仅从代码或templating router动态生成新路由网址不符合我的基本网址:
在视图中使用模板路由器
<template>
<!-- ... -->
<a route-href="route: user; params.bind: { userId: user.id }">
<!-- ... -->
</template>
从代码手动生成路线
let url = router.generate('user', { userId: id });
这两种方法都会导致错误的网址www.mydomain.com/user/12
,其中缺少基本网址thepage/
。
通过调试router.generate
方法,我发现路由器有一个单独的baseUrl
属性,在设置时产生正确的输出:
configureRouter(config: RouterConfiguration, router: Router): void {
// ...
router.baseUrl = '/thepage'; // <-- Manually set baseUrl
config.options.root = '/thepage';
config.map([
// The routes...
]);
// ...
}
我非常感谢您对以下问题有所了解:
为什么在已经有baseUrl
配置选项的情况下,我必须首先设置root
属性?有什么区别?
为什么我必须在路由器上设置它,而其他配置通常在Aurelia的config
对象上执行?
这种方法有效吗?我不太确定我是否应该这样做,因为文档的Articles & Guides部分中没有提到baseUrl
,但仅在Library API中仅提及用The [[Router]]'s current base URL, typically based on the [[Router.currentInstruction]].
描述。