2016-05-13 18 views
4

In Beta-Version von der untergeordneten Komponente (wir 'child1' sagen) Sie Ihre Eltern sagen könnte, wie sie von etwas (navigieren Sie zu) eine andere untergeordnete Komponente anstelle von Strom zu laden:Angular 2 neuer (RC1) Router. Verschachtelte Routen

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

('_router' is injected in constructor) 

In RC1 gibt es keine 'Eltern' Eigenschaft mehr, so scheint es, als ob Sie _router.navigate() verwenden müssen und die vollständige URL beginnend mit dem App-Root zur Verfügung stellen. So etwas wie

/root/grandparent/parent/child2 

Nun ist die Frage, ob das Kind Komponente über Eltern Routen nur bewusst ist, aber nicht über Großeltern - wie wollen Sie das tun? Wäre nett _router.navigate(['../child2']) zu verwenden, aber das gibt mir eine seltsame Fehler wie "invalid number of '../'.

Der einzige Weg, URL zu erhalten Eltern die ich bisher gefunden ist, dass:

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

(Sie auch dort von OnActivate Ereignis bekommen können)

aber das sieht einfach falsch für mich aus. Es kann auch abhängig von der Anzahl der Eltern/Großeltern sein - ich habe es noch nicht versucht.

Also, gibt es eine bessere Möglichkeit, das zu tun, oder der relative Pfad sollte funktionieren und ich mache etwas falsch?

Vielen Dank.

Antwort

4

Ich hatte das gleiche Problem. Gerade heute habe ich gefunden Lösung haben (es war in router.ts Datei here line: 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)); 
    } 

Sie müssen RouteSegment importieren, und fügen Sie Sie Ihren Konstruktor

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

wow Mann Pracht, du mein speichern Tag: p danke +1 –