Динамический параметр в опции 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 будет просто оставаться на том, что было установлено последним, когда маршрут был активным. В этом случае вы, вероятно, захотите инициализировать его значением, которое имеет смысл по умолчанию.

Другие вопросы по тегам