2021 年 3 月更新
Angular 团队最终为此合并了 PR,您可以查看https://github.com/angular/angular/pull/40303了解更多详细信息。
要使用它,只需输入
<div routerLinkActive="active-link" [routerLinkActiveOptions]="options">
</div>
哪里options
会有 IsActiveMatchOptions 的形状
export declare interface IsActiveMatchOptions {
fragment: 'exact' | 'ignored';
matrixParams: 'exact' | 'subset' | 'ignored';
paths: 'exact' | 'subset';
queryParams: 'exact' | 'subset' | 'ignored';
}
或者简单地接受一个布尔值exact
{
exact: boolean
}
原始问题
我在 Angular 中使用 routerLink 如下
<li routerLinkActive="active">
<a [routerLink]="['/view', 10]"
[queryParams]="{'offset': 0, 'numberOfItems': 100}"
queryParamsHandling="merge">
<div>View</div>
<div><span class="badge" [innerHtml]="viewCount"></span></div>
</a>
</li>
所以当 URL 看起来像 .active 类被添加到 li 标签
/view/10?offset=0&numberOfItems=100
如果 URL 被更改offset
或更改numberOfItems
为不同的值,则 .active 类将被删除,例如。
/view/10?offset=0&numberOfItems=120
我浏览了角度文档并设法通过添加另一个 routerLink 使其工作,但将其隐藏如下。
<li routerLinkActive="active">
<a [routerLink]="['/view', 10]"
[queryParams]="{'offset': 0, 'numberOfItems': 100}"
queryParamsHandling="merge">
<div>View</div>
<div><span class="badge" [innerHtml]="viewCount"></span></div>
</a>
<a [routerLink]="['/view', 10]" style="display:none;">
<div><span class="badge" [innerHtml]="viewCount"></span></div>
</a>
</li>
似乎上述方法有点hack。当路由器参数带有可选查询参数时,我可以设置任何配置以使 routerLinkActive 工作吗?