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

Clé*_*ops 5 javascript router typescript angular

我正在使用 Angular 2 开展一个项目,但遇到了一个问题。我创建了一个链接组件,我可以这样使用它:

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

该组件检查当前路由是否与通过参数传递的路由相同,如果是,则应用一个类。如何检查当前 url 是否与 提供的 url 相同routeName?好吧,它很丑。

this.isCurrentRoute = this.normalize(currentUrl) === this.routeName[0].toLowerCase();
Run Code Online (Sandbox Code Playgroud)

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

(在这种情况下,Channel/Add是路由名称)。

我不知道如何使用路线名称来做到这一点。我看过RouterInstruction

Din*_*tro 4

旧路由器实现的解决方案

\n\n

我认为这可以完成这项工作:

\n\n
router.isRouteActive(router.generate([\'Home\']))\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n\n

需要router.isRouteActive一个Instruction并且无法管理字符串本身,因此您需要使用以下命令生成Instructionrouter.generate()生成它。

\n\n

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

\n\n
\n\n

笔记

\n\n

正如 @Cl\xc3\xa9ment Flodrops 提到的,这只适用于平面路由结构。据我所知,目前不可能很好地存档它。

\n\n

也许可以使用 的 private _childeRouterRouter但要访问此属性,我们需要覆盖Router

\n\n

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

\n\n
\n\n

编辑:新路由器 3.0.0-alpha

\n\n

使用新路由器,您可以添加routerLinkActive="class",如果 routerLink 处于活动状态,这将添加该类。

\n\n

如果 routerLink 没有直接位于具有 routerLinkActive 的标签上,也可以工作:

\n\n
<li role="menuitem" routerLinkActive="active">\n    <a href="" [routerLink]="[\'/home\']" title="home" class="control-icon">\n        <span class="fa fa-home"></span>\n    </a>\n</li>\n
Run Code Online (Sandbox Code Playgroud)\n