Aurelia 路由配置问题
Aurelia routing configuration issue
当路径像 layer1/layer2 而不仅仅是 layer1 时,我在配置 Aurelia 路由时遇到问题。
这是项目文件结构(dist 下的文件根据 src 文件夹下的文件自动创建)
dist
| - home
| - home.html
| - home.js
| - user
| - register.html
| - register.js
app.html
app.js
main.js
src
| - home
| - home.html
| - home.js
| - user
| - register.html
| - register.js
app.html
app.js
main.js
当我执行以下操作时它工作正常:
app.html
<template>
<div>
<a href="user">register user</a>
<a href="otherlink">otherlink</a>
</div>
<div class='main'>
<router-view></router-view>
</div>
</template>
app.js
this.router.configure(config => {
config.title = 'demo';
config.options.pushState = true;
config.map([
// home routes
{ route: ['','home'], moduleId: './home/home', nav: true, title:'Home' },
// User register
{ route: ['user'], moduleId: './user/register', nav: true, title:'Register User'}
]);
});
但是当我将路径从 user 更改为 user/register 时,它不再有效
app.html
<template>
<div>
<a href="user/register">register user</a>
<a href="otherlink">otherlink</a>
</div>
<div class='main'>
<router-view></router-view>
</div>
</template>
app.js
this.router.configure(config => {
config.title = 'demo';
config.options.pushState = true;
config.map([
// home routes
{ route: ['','home'], moduleId: './home/home', nav: true, title:'Home' },
// User register
{ route: ['user/register'], moduleId: './user/register', nav: true, title:'Register User'}
]);
});
并且在 chrome 调试器中,我看到了这个错误:
GET http://localhost:9000/user/dist/user/register.html 404(未找到)
请注意,由于某种原因,额外的 user 被添加到 url 中,这导致无法找到 register.html 文件。同样,当我只使用 user 作为路由时,它工作正常没有任何错误但是当我只是从 user 更改为 user/register,已经不行了
有人可以告诉我为什么会发生这种情况以及如何解决吗?
将 link 的 href
更改为 href="#/user/register"
,这应该可以解决您的问题。
我没有看到您启用了 pushState。请编辑您的 index.html
并添加
<base href="http://localhost:9000/">
或者你的根 url 是什么。这应该可以为您解决问题。
我对 Ashley 的回答做了一点小改动,因为我们不需要在本地硬编码 url,这使环境更加友好。我测试过,效果也很好。
<base href="/">
当路径像 layer1/layer2 而不仅仅是 layer1 时,我在配置 Aurelia 路由时遇到问题。 这是项目文件结构(dist 下的文件根据 src 文件夹下的文件自动创建)
dist
| - home
| - home.html
| - home.js
| - user
| - register.html
| - register.js
app.html
app.js
main.js
src
| - home
| - home.html
| - home.js
| - user
| - register.html
| - register.js
app.html
app.js
main.js
当我执行以下操作时它工作正常:
app.html
<template>
<div>
<a href="user">register user</a>
<a href="otherlink">otherlink</a>
</div>
<div class='main'>
<router-view></router-view>
</div>
</template>
app.js
this.router.configure(config => {
config.title = 'demo';
config.options.pushState = true;
config.map([
// home routes
{ route: ['','home'], moduleId: './home/home', nav: true, title:'Home' },
// User register
{ route: ['user'], moduleId: './user/register', nav: true, title:'Register User'}
]);
});
但是当我将路径从 user 更改为 user/register 时,它不再有效
app.html
<template>
<div>
<a href="user/register">register user</a>
<a href="otherlink">otherlink</a>
</div>
<div class='main'>
<router-view></router-view>
</div>
</template>
app.js
this.router.configure(config => {
config.title = 'demo';
config.options.pushState = true;
config.map([
// home routes
{ route: ['','home'], moduleId: './home/home', nav: true, title:'Home' },
// User register
{ route: ['user/register'], moduleId: './user/register', nav: true, title:'Register User'}
]);
});
并且在 chrome 调试器中,我看到了这个错误:
GET http://localhost:9000/user/dist/user/register.html 404(未找到)
请注意,由于某种原因,额外的 user 被添加到 url 中,这导致无法找到 register.html 文件。同样,当我只使用 user 作为路由时,它工作正常没有任何错误但是当我只是从 user 更改为 user/register,已经不行了
有人可以告诉我为什么会发生这种情况以及如何解决吗?
将 link 的 href
更改为 href="#/user/register"
,这应该可以解决您的问题。
我没有看到您启用了 pushState。请编辑您的 index.html
并添加
<base href="http://localhost:9000/">
或者你的根 url 是什么。这应该可以为您解决问题。
我对 Ashley 的回答做了一点小改动,因为我们不需要在本地硬编码 url,这使环境更加友好。我测试过,效果也很好。
<base href="/">