gpt4 book ai didi

javascript - css 属性在 ngFor 上的 Angular 4 中使用 ngStyle 应用于错误的元素

转载 作者:行者123 更新时间:2023-11-30 07:54:21 26 4
gpt4 key购买 nike

我正在尝试更改从第 4 个按钮动态添加到元素数组的元素的背景颜色,单击我的 component.html,如下所示:

    <button class="btn" (click)="toggleContent()">Display Details</button>

<div class="left-align left-div">
<div class="center-align" *ngFor="let counter of count" >
<p [ngStyle]="{backgroundColor: blueBackground()}" [ngClass]="{whitetext: counter > 4}">{{ counter }}</p>
</div>
</div>

在第 5 次点击之后,数组中的所有元素都获得彩色背景,而不是那些在计数器超过 4 后添加的元素。同时,ngClass 指令在相同条件下工作良好,只有文本第 5 次点击后的元素变为白色。这是我的 component.ts:

import { Component } from '@angular/core';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styles: [`
.outer-div {
height: 20px;
margin: 20px;
}
.left-div {
width: 50px;
margin-top: 5px;
}
.inner-div {
border: 2px solid lightblue;
height: 20px;
margin: 20px;
}
.whitetext {
color: white;
}
`]
})
export class AppComponent {

count = [];
counter: number = 0;

toggleContent() {
this.counter ++;
this.count.push(this.counter);
}

blueBackground() {
return (this.counter > 4) ? 'lightblue' : 'white';
}

}

我在监督什么……?

最佳答案

问题是当你写 <p [ngStyle]="{backgroundColor: blueBackground()}"..并增加 this.counter ,它将影响所有元素,因为每个更改检测滴答都会更新所有具有此绑定(bind)的当前元素。因此,当计数器大于 4 时,每个元素都会自行更新。

与其手动更新计数器,不如利用 ngForindex属性(property)。

例子:

<div class="center-align" *ngFor="let counter of count;let i = index" >
<p [ngStyle]="{'backgroundColor': (i+1 > 4) ? 'lightblue' : 'white'}" [ngClass]="{whitetext: counter > 4}">{{ counter }}</p>
</div>

Plunker 示例:http://plnkr.co/edit/QECx8Jd2nP8PnrqzcD89?p=preview

关于javascript - css 属性在 ngFor 上的 Angular 4 中使用 ngStyle 应用于错误的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44056868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com