2016-04-25 88 views
2

我正在使用Angular 2處理項目,並且遇到了問題。 我已經創建了一個鏈接部件和我可以使用這樣的:如果當前路線是一樣的一個經由參數傳遞Angular 2:檢查路由名稱是否爲當前路徑

<cmp-link [routeName]="['Channel/Add']">Add channel</cmp-link>

該組件的檢查和,如果它是,被施加一類。如何檢查當前網址是否與routeName提供的網址相同?那很醜陋。

this.isCurrentRoute = this.normalize(currentUrl) === this.routeName[0].toLowerCase(); 

你不喜歡嗎?我也不。我想查看一條路線當前是否使用它的名字激活。

(在這種情況下,Channel/Add是路由名稱)。

我不知道如何做到這一點使用路線的名稱。我看過RouterInstruction

回答

2

解決方案舊的路由器實現

我覺得這個做前人的精力工作:

router.isRouteActive(router.generate(['Home'])) 

這不是一個很好的解決方案,但我唯一知道的。


router.isRouteActive希望有一個Instruction,是無法管理的字符串本身,所以你需要生成此Instructionrouter.generate()

來源:https://angular.io/docs/ts/latest/api/router/Router-class.html


注意

正如@克萊門特Flodrops提到的,這僅適用於平坦的路由結構。據我所知,目前不可能很好地歸檔。

也許可以使用Router的私人_childeRouter,但要訪問此屬性,我們需要覆蓋Router -class。

所以我建議等一段時間,也許路由器會支持這個操作一次。


編輯:新的路由器3.0.0-α

隨着new router可以添加routerLinkActive="class",這將添加類,如果routerLink處於活動狀態。

同樣適用,如果routerLink不直接與routerLinkActive標籤:

<li role="menuitem" routerLinkActive="active"> 
    <a href="" [routerLink]="['/home']" title="home" class="control-icon"> 
     <span class="fa fa-home"></span> 
    </a> 
</li> 
+1

這要高度重視的作品,但在我的情況,我有嵌套的路線,如果我想知道,如果一個子路線主動的另一個,我不能:'router.isRouteActive()'總是返回'true',因爲「根路由」是相同的。 –

+0

哦,我沒注意到。我會仔細看看這個問題。感謝您的快速回復。 – Dinistro

+0

@ClémentFlodrops據我所知,現在這種情況不太可能。除了在編輯答案中提到的方式。 – Dinistro