angular - 如果 routerLink 具有绑定(bind),为什么 routerLinkActive 不触发?

标签 angular angular2-routing angular-template angular2-router3

在我的应用程序中,有不止一种方法可以路由到特定资源,例如,我有面包屑以便能够更自由地浏览项目层次结构

SectionA > SectionB > SectionC

其中 SectionAid=1 等等。同时,我在侧边菜单中得到一个指向当前所选项目的 routerLink,在上面的示例中,它指向 SectionC (id=3)。我通过在有人点击面包屑时发出事件并将事件中的 id 绑定(bind)到侧边菜单中的 routerLink 来保持这些同步:

<li>
    <a [routerLink]="['/section, section? section.id : 0]" [routerLinkActive]="['active']"></a>
</li>

这样,如果用户离开该组件,他们只需单击侧边菜单中的按钮即可返回到相同状态(而不必从头开始导航到他们的目标部分)。

这实际上工作正常,但是,如果我浏览面包屑(因此使用上面的 section 绑定(bind))routerLinkActive 不会触发,尽管 < em>当前 URL 和侧边菜单按钮上的 URL 相同。

只有当我直接点击侧边菜单按钮时,才会应用 active 类,它不会通过绑定(bind)工作。

它适用于没有参数的 URL(那里没有绑定(bind)),所以我猜这与 Angular 的更改检查有关。

问题是,这是有意为之的行为吗?如果是,我应该怎么做才能让它发挥作用?

最佳答案

复制了这个问题并标记为 wiki,因为我不想获得业力:https://stackoverflow.com/a/40528170/88066

1) 在你的组件中

import {Router} from 'angular2/router';

isActive(instruction: any[]): boolean {
    return this.router.isActive(this.router.createUrlTree(instruction), true);
}

2) 在你的 html 中

<a [class.active]="isActive(['user', currentUser.name])">

Router docs on angular.io

关于angular - 如果 routerLink 具有绑定(bind),为什么 routerLinkActive 不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085736/

相关文章:

带路由器导出的 Angular 全屏 404 页面

Angular 5 HttpClient 发布原始二进制数据

ios - 防止 Angular NativeScript WebView 通过捏缩放进行缩放

Angular 。使用 APP_INITIALIZER 时路由器 DI 不工作

angular - 如何使用带有 *ngFor 的 Angular2 模板从嵌套数组中创建一个表?

angular - 引用错误: navigator is not defined in angular4 with server side rendering

Angular2 Router 3.0 beta 1(通过 Routerlink 的子路由失败)

angular - 如何在 angular2 的数组中的数组中设置补丁值(更新嵌套值)?

javascript - Angular 父子绑定(bind)变化检测

javascript - Angular 表达式 {{::}} 中的两个冒号是什么意思?