首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带参数的RouterLink的RouterLinkActive (/dynamic)

带参数的RouterLink的RouterLinkActive (/dynamic)
EN

Stack Overflow用户
提问于 2016-09-01 20:30:41
回答 6查看 11.8K关注 0票数 22

在应用程序本身导航时使用动态生成的链接时,RouterLinkActive不起作用。

例如,在我的顶部导航中,我有这个;

代码语言:javascript
复制
<a [routerLink]=['user', currentUser.name] routerLinkActive='active'>{{currentUser.name}}</a>

而硬编码版本可以工作。

代码语言:javascript
复制
<a [routerLink]=['user','bob']>View Bobs Account</a>

这里有一个很好的例子:https://plnkr.co/edit/BYKMucE3Y75uJSpV5VWx?p=preview

单击"John“和"Dynamic Router Link Name =”,"John“应该都处于活动状态。这有时会在第一次点击时起作用,如果是这样的话,然后点击回到“主页”,再次点击"John",你会看到只有硬编码的链接被注册为活动的,即使hrefs是相同的。

这是设计好的/不可能的吗?或者是我设置得不正确?

EN

回答 6

Stack Overflow用户

发布于 2016-11-10 20:54:46

在您的组件中:

代码语言:javascript
复制
import {Router} from '@angular/router';

isActive(instruction: any[]): boolean {
  // Set the second parameter to true if you want to require an exact match.
  return this.router.isActive(this.router.createUrlTree(instruction), false);
}

在您的HTML中:

代码语言:javascript
复制
<a [class.active]="isActive(['user', currentUser.name])">

Router.isActive() documentation on angular.io

票数 28
EN

Stack Overflow用户

发布于 2018-05-29 18:00:41

接受的答案对我不起作用,我只想突出显示顶级路由匹配,所以我使用:

代码语言:javascript
复制
isActive(url): boolean {
    return this.router.url.includes(url);
}

和:

代码语言:javascript
复制
[class.active]="isActive('url')"
票数 5
EN

Stack Overflow用户

发布于 2016-12-28 07:42:01

仅当路由更改时,才会在初始负载时评估routerLinkActive。当链接更改时,不会重新评估它。因此,动态生成链接不适用于routerLinkActive。Victor Bredihin的解决方案在渲染过程中评估组件函数时起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39271654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档