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

Posted

技术标签:

【中文标题】css属性应用于ngFor上Angular 4中的ngStyle的错误元素【英文标题】:css property applied to wrong element with ngStyle in Angular 4 on ngFor 【发布时间】:2017-10-18 19:20:35 【问题描述】:

我正在尝试更改从第 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';
    


我在监督什么……?

【问题讨论】:

所以你只想要第 5 个元素的蓝色背景? 是的,从第五个元素开始的所有后续元素。 【参考方案1】:

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

您可以利用ngForindex 属性,而不是手动更新您的计数器。

例子:

<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

【讨论】:

行得通!但是通过函数更新它有什么问题呢?我不能完全把我的手指放在它上面。 @AndreyK 当您将方法绑定到您的 p 元素时,这不是一次性的。他们将等待this.counter 更改。您需要为每个元素设置一个特定的标志,以便将它们与其他元素区分开来;像一个 id (在这种情况下是索引)。有了你所做的,你基本上是说这个循环内的所有p 元素都绑定到this.counter 字段,当它高于 4 时,将 backgroundColor 更改为浅蓝色。因此他们这样做:-) 非常感谢您的解释。我现在明白了,这与在没有方法的情况下使用 ngStyle 和 ngClass 是不同的。

以上是关于css属性应用于ngFor上Angular 4中的ngStyle的错误元素的主要内容,如果未能解决你的问题,请参考以下文章

<input> 元素中的“name”属性与 *ngFor 的 Angular2 绑定

angular2中的[ngFor]和[ngForOf]有啥区别?

在 Angular 4 中使用 trackBy 对 *ngFor 数组进行排序

使用 *ngFor 迭代数组,同时过滤某个属性 [重复]

Angular 2 *ngFor的数组/ json渲染中的深层嵌套json到数组[重复]

如何使用 *ngFor 循环使用 Tailwind Css 的表中的 2 列?