2016-05-13 10 views
4

В бета-версии от компонента ребенка (скажем 'child1') вы могли бы сказать своим родителям, чтобы загрузить (перейти к) другой компонент ребенка вместо тока что-то вроде этого:Угловой 2 новый (RC1) маршрутизатор. Вложенные маршруты

_router.parent.navigate(['child2']); 

('_router' is injected in constructor) 

В RC1 там нет 'parent', так что вам кажется, что вам нужно использовать _router.navigate() и предоставить полный URL-адрес, начиная с корня приложения. Что-то вроде

/root/grandparent/parent/child2 

Теперь вопрос в том случае, если ребенок компонент знает только о маршрутах родителей, но не о прародителей - как вы это делаете? Было бы неплохо использовать _router.navigate(['../child2']), но это дает мне странные ошибки, как "invalid number of '../'.

Единственный способ получить URL родителей я нашел до сих пор является то, что:

_router.routeTree._root.children[0].value.stringifiedUrlSegments 

(вы также можете получить там от OnActivate события)

, но это выглядит неправильно. Это также может различаться в зависимости от количества родителей/бабушек и дедушек - я еще не пробовал.

Итак, есть ли лучший способ сделать это, или относительный путь должен работать, и я делаю что-то неправильно?

спасибо.

ответ

4

У меня была та же проблема. Только сегодня я нашел решение (это было в router.ts файл here строки: 89)

/** 
    * Navigate based on the provided array of commands and a starting point. 
    * If no segment is provided, the navigation is absolute. 
    * 
    * ### Usage 
    * 
    * ``` 
    * router.navigate(['team', 33, 'team', '11], segment); 
    * ``` 
    */ 
    navigate(commands: any[], segment?: RouteSegment): Promise<void> { 
    return this._navigate(this.createUrlTree(commands, segment)); 
    } 

Вам нужно импортировать RouteSegment и добавить его вам ваш конструктор

import { Router, RouteSegment } from '@angular/router'; 
... 
contructor(private $_router:Router, private $_segment:RouteSegment){} 
... 

//If you are in for example child1 and child 1 is sibling of child2 
this.$_router.navigate(['../child2'],this.$_segment); 
+0

вау люди превосходны, вы сохраните мой день: p спасибо +1 –

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