2016-10-07 2 views
0

Я пытаюсь динамически генерировать некоторые маршруты в дочернем маршрутизаторе на основе параметра, указанного в URL-адресе.Как получить доступ к параметрам url при настройке дочернего маршрутизатора

Так у меня есть основной маршрутизатор настроен с этим маршрутом: mydomain.com/#/page/ : страница, который загружает модуль «страницу»

И в моей странице модуля У меня есть функция configureRouter который должен принести секции относительно страницы, указанной в URL, прежде чем добавить их в детском маршрутизаторе:

public async configureRouter(config, router){ 
    page = ??? 
    sections = wait fetchPageSections(page) 
    //for each section, add route in child router 
} 

Моя проблема здесь заключается в том, чтобы получить : параметр страницы, так как это будет доступно только (если я не хорошо понимают) в функции activate(), которая будет вызываться после configureRouter(). Однако, поскольку эта часть маршрута уже была «сопоставлена» в родительском маршрутизаторе, я думаю, что должен быть способ получить ее в функции configureRouter.

Спасибо.

ответ

1

Не знаю, есть ли способ получить параметр в методе configureRouter(), поскольку, насколько я знаю, на данный момент новый маршрут еще не запущен.

Вы можете получить параметр :page в методе created().

created() { 
    let page = this.router.parentInstruction.params.page; 
    // do something and add routes 
    //this.router.addRoute({ route: "test", moduleId: "test", nav: true, title: "test" }); 
    //this.router.refreshNavigation(); 
} 

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

Третий вариант, и самый простой на мой взгляд, использует mapUnknownRoutes() для динамических маршрутов:

router.configure(config => { 
    config.mapUnknownRoutes(instruction => { 
    //read the instruction.fragment to get 
    //you can return a promise and make async requests 
    return instruction; 
    }); 
}); 

Я надеюсь, что это помогает!

+0

Я реализовал сочетание решений 1 и 3. Я загружаю маршруты в метод created() (как только я получу доступ к параметру страницы), и прежде чем я буду использовать mapUnknownRoutes() для перенаправления на пустой раздел, в то время как маршруты не загружен. – Nono

1

Маршрутизатор, в котором вы прошли, находится в configureRouter(config, router) является дочерним маршрутизатором. К счастью, у него есть свойство parent, которое предоставит вам то, что вы хотите.

router.parent.currentInstruction.params.page должен предоставить вам то, что вы ищете: параметр page от родительского маршрутизатора.

+0

Я пробовал это, но, к сожалению, currentInstruction родительского маршрутизатора все еще имеет значение null при входе в функцию configureRouter дочернего модуля ... Я думаю, что он установлен только до вызова функции активации ... – Nono

+0

Это сработало для меня. Я создам суть, чтобы показать вам :-) –

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