路由器链接行为在Angular2测试版中被破坏

路由器链接行为在Angular2测试版中被破坏,angular,typescript1.7,angular2-directives,Angular,Typescript1.7,Angular2 Directives,我想突出显示当前活动的链接 <a [routerLink]="['/route']" /> 在_router.IsRouteractive内部有一个当前指令字段,该字段应包含当前路由组件。该组件将与导航指令进行比较。实际上,如果路由组件相等,则链路是当前的 问题是当前指令为空。它将在以下位置分配: Router.prototype.commit = function(...) 此函数在处理指令后被调用 所以这永远不会奏效。我一直在做这样的事情: get isRouteActive

我想突出显示当前活动的链接

<a [routerLink]="['/route']" />
在_router.IsRouteractive内部有一个当前指令字段,该字段应包含当前路由组件。该组件将与导航指令进行比较。实际上,如果路由组件相等,则链路是当前的

问题是当前指令为空。它将在以下位置分配:

Router.prototype.commit = function(...)
此函数在处理指令后被调用


所以这永远不会奏效。

我一直在做这样的事情:

get isRouteActive(): {
    return this._router.isRouteActive(this._navigationInstruction);
}
<li [class.active]="somethingThatReturnsTrueOrFalse()"><a [routerLink]="['/About']" class="link">About</a></li>
<li linkActive>
  <a [routerLink]="['./Home']">Home</a>
</li>

不确定这是否有助于解决可能出现的路由器行为问题,但有一个很好的解决方案,可以用路由器更改标记其他元素(例如父级li)。plunker包含一个指令:LinkActiveDirective.ts(可以在Users.ts中看到用法)

该指令挂接[linkActive]并侦听路由器更改。当路由器链接处于活动状态时,该类在元素上变为活动

用法如下:

<li [class.active]="somethingThatReturnsTrueOrFalse()"><a [routerLink]="['/About']" class="link">About</a></li>
<li linkActive>
  <a [routerLink]="['./Home']">Home</a>
</li>

  • 希望有帮助。

    我有一个指令,您可以使用。请参见此处的拉动请求

    将angular2-polyfills.js和es6-shim.js移动到system.js脚本标记下面就成功了。谢谢


    谢谢但我的问题不在[class.active]中,而是在“路由器链接活动”中。在您的示例中,您将在ang2.beta-0中自动获得该类。我不明白。。有趣。我的样本也在使用beta-0是的,我明白了。这就是为什么它更有趣,也很奇怪。我调试过了。但我用的是打字脚本。从TS编译:不确定这是否重要,但我会尝试将带有RouterLink的模板移到一个单独的html模板中,以避免字符串中的转义谢谢您的示例。据我所知,Angular2测试版有很多例子,效果很好。主要区别在于,所有这些示例都使用CDN JS角度引用。我使用的是webpack+TS+CommonJS。试图用CDN复制相同的行为