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

Не имеет значения, если маршрут 'user' имеет свой собственный под-маршрутизатор, этот параметр будет добавлен в запрос. Недостатком является то, что он сидит в конце URL-адреса. Я знаю, более понятно следовать иерархии: 'user/myUser/childroute' vs.' user/childRoute? UserId = myUser' – balazska

 Смежные вопросы

  • Нет связанных вопросов^_^