当像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
Run Code Online (Sandbox Code Playgroud)
当我执行以下操作时,它可以正常工作:
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>Run Code Online (Sandbox Code Playgroud)
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'}
]);
});Run Code Online (Sandbox Code Playgroud)
但是,当我将路径从用户更改为用户/注册时,如下所示,它不再有效
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>Run Code Online (Sandbox Code Playgroud)
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'}
]);
});Run Code Online (Sandbox Code Playgroud)
在chrome调试器中,我看到了这个错误:
GET http:// localhost:9000/user /dist/user/register.html 404(未找到)
请注意,不知何故,额外的用户被添加到url,这导致无法找到register.html文件.再次,当我只是使用用户作为路由时,它工作正常没有任何错误,但当我只是从用户更改为用户/注册时,它不再工作.
有人可以让我知道为什么会发生这种情况以及如何解决这个问题?
更改href链接href="#/user/register",这应该为您解决问题.
我没有看到你启用了pushState.请编辑index.html并添加
<base href="http://localhost:9000/">
Run Code Online (Sandbox Code Playgroud)
或者无论你的根网址是什么.这应该为您解决问题.
我对Ashley的答案进行了一些小改动,因为我们不需要对本地网址进行硬编码,所以它更加环保.我测试了它并且运行良好.
<base href="/">
Run Code Online (Sandbox Code Playgroud)