angular - 基于 router.url 匹配 Angular 向 ngFor 循环中的一个元素添加一个类
问题描述
这是一个进度时间线,如果用户在当前章节,class="bar" 的宽度需要更改。如果 id 与当前 router.url 匹配,我需要向 bar 类添加一个活动类。
下面是标记。
<div class="progress-container" >
<div [id]="chapter.slug" class="bar" [class.active]="active" [routerLink]="'/'+ chapter.slug" *ngFor="let chapter of chapters; let i = index;">
<div class="fill"></div>
<p>{{i + 1}}</p>
<div class="question-dots">
<a href="" [routerLink]="'/'+chapter.slug+'/'+question.slug" *ngFor="let question of questions"></a>
</div>
</div>
</div>
在我的 component.ts 文件中,我使用如下 if 语句将 active 设置为 true:
for(let i = 0; i < this.chapters.length; ++i)
{
console.log(this.router.url.indexOf(this.chapters[i].slug) > -1);
if(this.router.url.indexOf(this.chapters[i].slug) > -1){
this.active = true;
}
}
但是,这会将活动类添加到 for 循环内的所有元素中。如何将类添加到仅与路由器 url 匹配的 1 元素?
解决方案
您可以设置类,[ngClass]="getBarClass(i)"
其中 wheregetBarClass
是组件中的一个函数,该函数获取索引并返回类列表,['bar']
或者['bar', 'bar-active']
基于索引。然后你可以将你需要的任何东西应用到bar-active
课堂上。
检查NgClass 文档。
推荐阅读
- swift - 当用户切换到暗模式时,无法更新 UINavigationBar tintColor
- html - 如何对响应式导航栏进行排序
- python - 如何为数据框中的每一列创建一个 csv 文件?
- javascript - 模态后面的Adminlte模板datetimepicker
- cplex - 如何将 AMPL 转换为 CPLEX
- r - 如何使用 purrr/tidyverse 将 ets、auto.arima 等多个时间序列模型应用于 R 中的数据组?
- android - 将数据从数据库推送到烧瓶 Web 应用程序和 Android 设备
- visual-studio-code - vscode源控制连接到远程主机,显示时钟图标
- algorithm - BFS的时间复杂度分析
- javascript - 将 Object 作为道具传递并在 React js 中使用 map() 函数