2016-05-13 110 views
4

從子組件測試版(假設'child1'),你可以告訴你的父母通過類似的東西,而不是當前的負載(導航到)一個不同的子組件:Angular 2新(RC1)路由器。嵌套路線

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

('_router' is injected in constructor) 

在RC1沒有'parent'property,所​​以它看起來像你必須使用_router.navigate(),並提供從應用程序根開始的完整url。像

/root/grandparent/parent/child2 

東西現在的問題是,如果子組件是隻知道關於父母的路線,但不是祖父母 - 你怎麼做到這一點? 將是不錯的使用_router.navigate(['../child2'])但是,讓我像"invalid number of '../'.

的唯一辦法一個奇怪的錯誤,以得到父母的網址我迄今發現的是:

_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

WOW的人高超,你救我日:p感謝+1 –