2015-03-24 111 views
6

我在配置Aurelia路由时遇到类似layer1/layer2的路径而不仅仅是layer1。 这里(下DIST的文件被自动创建基于文件src文件夹下)Aurelia路由配置问题

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'} 
 
    ]); 
 
});

但是,当我从用户用户更改路径/注册像下面,它不再起作用

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'} 
 
    ]); 
 
});

中和铬调试器,我看到这个错误:

GET http://localhost:9000/用户 /距离/用户/ register.html 404(Not Found)

请注意,不知怎的,一个额外的用户被添加到URL,导致无法找到register.html文件。再说一次,当我使用用户作为路由时,它工作正常,没有任何错误,但是当我从用户更改为用户/注册时,它不再工作。

有人请让我知道为什么会发生这种情况,以及如何解决它?

回答

7

更改 href的链接为 href="#/user/register"并且应该为您解决问题。

我没有看到您启用了pushState。请编辑你的index.html并添加

<base href="http://localhost:9000/"> 

或者你的根网址是什么。这应该为您解决问题。

+0

感谢您的回复。但是,这并没有奏效。我们添加了** config.options.pushState = true **从网址中删除#号,所以http:// localhost:9000/user可以在没有#的情况下访问。但是由于某种原因,即使路由设置为** user/register **,我们也无法使http:// localhost:9000/user/register正常工作。 – 2015-03-25 01:36:10

7

我对Ashley的答案做了一个小改动,这使得它更加环保,因为我们不需要对本地URL进行硬编码。我测试了它,并且运行得很好。

<base href="/">