Динамический параметр в опции href в Aurelia Routing config.map
Это кажется очень простой проблемой, но это сводит меня с ума...
Кто-нибудь знает, как я могу указать параметр dynamic : id в параметре конфигурации маршрутизации href?
Следующее, к сожалению, не работает:
config.map([
// ... default parameterless routing here
{
route:[':id/request'],
moduleId:'processes/bdd/request/request',
name:'Request', title:'Request', href:`#/bdd/request/${id}/request`, settings:{type:'Request', icon:''}, nav:true,
},
{
route:[':id/requestAuth'],
moduleId:'processes/bdd/request/requestauthorization',
name:'RequestAuthorization', title:'Request Authorization', href:`#/bdd/request/${id}/requestAuth`, settings:{type:'Request', icon:''}, nav:true,
},
// ... some additional mappings here
]);
2 ответа
href
свойство статично. Если вы хотите создать маршрут для ссылки, использующей этот маршрут, вы можете использовать route-href
пользовательский атрибут, как это:
route-href="route: request, params.bind: { id: someProp }"
Обратите внимание, что я изменил имя маршрута на camelCase (все строчные, так как здесь это одно слово), чтобы соответствовать соглашению об именах маршрутов.
У меня был похожий вариант использования, и я смог заставить его работать, добавив шаг конвейера к маршрутизатору, который изменяет конфигурацию на лету.
Мой вариант использования может немного отличаться тем, что я хочу, чтобы элемент отображался в навигационной панели только при активном маршруте - скажем, у меня есть маршруты /abc
, /def/:id
, а также /ghi
- когда активным маршрутом является ABC или GHI, на панели навигации будут отображаться только эти элементы, но если активным маршрутом является DEF, он должен появиться на панели навигации, и при щелчке по нему должен появиться тот же идентификатор DEF, который вы сейчас смотрю. Таким образом, моя конфигурация маршрута включает в себя параметр, который указывает, что маршрут должен отображаться в навигационной панели только тогда, когда это активный маршрут.
Вот интересные части моей реальной функции configureRouter:
configureRouter(config, router) {
config.addPreActivateStep(Preactivate); // explained below
config.map([
// some routes
{ route: 'patients/:patientId', name: 'patient-master',
moduleId: 'patients-and-cases/patient-master/patient-master',
title: 'Patient', nav: true, settings: { renderOnlyWhenActive: true },
href: '#' // it doesn't matter what this is
},
// more routes
]);
}
А вот и Preactivate
класс, который устанавливает href на preactivate:
class Preactivate {
run(routingContext, next) {
routingContext.config.href = routingContext.fragment;
return next();
}
}
Если, в отличие от меня, вы хотите, чтобы это все время отображалось в навигационной панели, это все равно будет работать - href будет просто оставаться на том, что было установлено последним, когда маршрут был активным. В этом случае вы, вероятно, захотите инициализировать его значением, которое имеет смысл по умолчанию.