2017-02-21 51 views
2

Это кажется очень простой вопрос, но это сводит меня с ума ...динамический параметр HREF опции в Aurelia маршрутизации config.map

Кто-нибудь знает, как я могу указать динамический : параметр 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 
    ]); 

ответ

3

href свойство является статическим. Если вы хотите создать маршрут для связи с использованием этого маршрута, вы можете использовать route-href настраиваемый атрибут, как это:

route-href="route: request, params.bind: { id: someProp }" 

Обратите внимание, что я изменил название маршрута, чтобы быть верблюжьего (все в нижнем регистре, так как это одно слово здесь) в соответствии с соглашением об именах маршрутов.

+0

Но если я удалю ** атрибут ** href ** в конфигурации маршрута? Если я попытаюсь удалить его, я получаю следующую ошибку: «ERROR [app-router] Ошибка: неверная конфигурация маршрута для«: id?/RequestAuth »: динамические маршруты должны указывать« href: »для включения в навигационную модель .' – Themos

+1

Это потому, что у вас есть свойство 'nav: true'. Если вы не планируете использовать этот маршрут в какой-либо форме навигационной панели или что-то в этом роде, то удалите это, и маршрутизатор перестанет жаловаться. –

+0

Но что, если я действительно хочу использовать его в навигационной панели? – Themos

0

У меня был подобный вариант использования, и я смог заставить его работать, добавив шаг шага к маршрутизатору, который изменяет конфигурацию «на лету».

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

class Preactivate { 
    run(routingContext, next) { 
    routingContext.config.href = routingContext.fragment; 
    return next(); 
    } 
} 

Если, в отличие от меня, вы хотите, чтобы это для отображения в навигационной панели все это время, это все равно будет работать - href просто останется установленным на последнее, на что он был установлен, когда маршрут был активным. В этом случае вы, вероятно, захотите инициализировать его до значения по умолчанию, которое имеет смысл.

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

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