【发布时间】:2018-01-09 02:03:47
【问题描述】:
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
我浏览了angular docs 并设法通过添加另一个 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>
似乎上述方法有点小技巧。当路由器参数带有可选查询参数时,我可以设置任何配置以使 routerLinkActive 工作吗?
【问题讨论】:
-
只是在这里探索选项:是否有必要在
<a>标签中输入查询参数值(偏移量 = 0,项目 = 100)?如果这是默认值,不应该在目标组件本身内设置它们吗?在这种情况下,您只需要一个<a>。 -
以我目前的架构,是必须的。因为我用相同的组件配置了 2 个不同的路由并解析。一条路线需要这些参数,另一条路线不需要。然后当 resolve guard 调用时,我将使用参数来相应地检索数据。
-
我刚刚检查了源代码。它正在比较确切的 URL,所以不,没有配置来选择退出参数。