2017-02-09 70 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