如何更改在 ngFor 中单击的每个 div 的背景颜色?

Posted

技术标签:

【中文标题】如何更改在 ngFor 中单击的每个 div 的背景颜色?【英文标题】:How do I change the background color of every div clicked inside ngFor? 【发布时间】:2022-01-23 09:24:24 【问题描述】:

我目前在 ngFor 中有一些自定义过滤器芯片,目前我将它们设置为一次只允许一个芯片在您单击它时更改背景颜色。我想更改此设置,以便我可以选择多个芯片并让其中多个芯片在选择时更改背景颜色。我应该如何处理?

html

<div *ngFor="let category of categories; let i = index" class=" filter-chips px-3"
    (click)="active = i; chipAdded(category)" [ngClass]="active === i ? 'chip-clicked': '' ">
      category
</div>

组件:

active: any;

CSS:

.filter-chips 
  min-width: 50px;
  height: 30px;
  background-color: grey;
  border: 1px solid $grey-04;
  box-sizing: border-box;
  border-radius: 24px;
  text-align: center;
  color: $grey-02 !important;
  cursor: pointer;


.chip-clicked 
  background-color: green;
  color: white !important;
  border-color: white !important;

【问题讨论】:

【参考方案1】:

试试下面的代码。

onChildSelect(Child)

    for (let myChild of this.children) 
        myChild.BackgroundColour = "white";
    

    Child.BackgroundColour = "red";
<li style="cursor: pointer" class="list-group-item" 
    *ngFor="let Child of children" (click)="onChildSelect(Child)" 
    [style.background-color]="Child.BackgroundColour" >

【讨论】:

【参考方案2】:

您可以将active 更改为一组数字,以跟踪所有选定的categories。然后你可以用active.includes(i)检查category是否被选中。

TypeScript 文件:

public categories = ['Category 1', 'Category 2', 'Category 3'];
public active: number[] = [];

chipAdded(index: number): void 
  if (this.active.includes(index)) 
    this.active = this.active.filter((item) => item !== index);
   else 
    this.active.push(index);
  

HTML 文件:

<div *ngFor="let category of categories; let i = index" class="filter-chips px-3"
  (click)="category.active = true; chipAdded(category)" [ngClass]="category && category.active ? 'chip-clicked': '' ">
    category
</div>

Working example

【讨论】:

以上是关于如何更改在 ngFor 中单击的每个 div 的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ngfor 中向元素添加 id 以及在 ngfor 中条件创建元素

如何在 1 个单个 div 中生成 *ngFor 循环项,而不是每个项目周围都有一个 div 容器

来自位于 ngFor 内的兄弟组件的角度切换布尔变量

如何在Angular的`ngFor`中插入分隔符?

ngFor 在 Angular 中制作 5 个 div 和 5 个 uls——而不是内部项目

如何在 React js 中单击时更改 div 背景?