Angular 2 : 检查routeName是否是当前的

Angular 2 : check if routeName is the current one

我正在使用 Angular 2 进行一个项目,但我遇到了一个问题。 我创建了一个 link 组件,我可以像这样使用它:

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

此组件检查当前路由是否与通过参数传递的路由相同,如果是,则应用 class。如何检查当前 url 是否与 routeName 提供的相同?好丑啊

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

你不喜欢吗?我也不。我想检查当前是否使用路由名称激活了路由。

(在本例中,Channel/Add 是路由名称)。

我不知道如何使用路由名称。我看过 RouterInstruction

旧路由器实现的解决方案

我认为这个灵魂可以胜任:

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

这不是一个很好的解决方案,但我知道的唯一一个。


router.isRouteActive 想要一个 Instruction 并且无法管理字符串本身,因此您需要使用 router.generate().[=22= 生成此 Instruction ]

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


备注

如@Clément Flodrops 所述,这仅适用于平面路由结构。据我所知,目前无法很好地存档。

也许可以使用 Router 的私有 _childeRouter,但要访问此 属性,我们需要覆盖 Router- class。

所以我建议再等一段时间,也许Router会支持一次这个操作。


编辑:新路由器 3.0.0-alpha

使用 new router,您可以添加 routerLinkActive="class",如果 routerLink 处于活动状态,这将添加 class。

同样有效,如果 routerLink 没有直接在带有 routerLinkActive 的标签上:

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