angular - 我正在使用 *ngFor 来迭代卡片布局中的元素。我想随机改变他们的背景颜色有什么办法吗?

标签 angular typescript angular6 ngfor

下面是从远程服务器获取数据的 HTML 部分。

 <div class="col-md-6 col-xl-4" *ngFor="let material of materials" >
    <div class="card widget-statstic-card"  >
      <div class="card-header">
        <div class="card-header-left">
          <h3 class="d-inline-block">{{material.Prd_Type}}</h3>
        </div>
      </div>
      <div class="card-block">
        <div class="text-left">
          <h3 class="d-inline-block">

          </h3>
        </div>
      </div>
    </div>
  </div>

这是我给出的 TS 函数,该函数从 ts 中定义的颜色数组返回颜色。这里的问题是 *ngFor 循环不断重复,所有颜色都在改变,我不希望它们再次改变。

colors=['red','blue','green'];

  materials: any;
  randomItem: string;
  constructor(public http: HttpService) {
    this.http.getMethod('ProductType/get').subscribe((data => {
      this.materials = data;
      console.log(this.materials);
    }));
  }

  getColor(){
     this.randomItem = this.colors[Math.floor(Math.random()*this.colors.length)];
     console.log('s',this.randomItem);
     return this.randomItem;
  }

  ngOnInit() {
    this.getColor();
  }

最佳答案

假设您只想在每次获取数据时随机化颜色,则应该在此时进行随机化:

this.http.getMethod('ProductType/get').subscribe((data => {
  this.materials = data.map(material => {
    // assumes your data doesn't already have a "color" property
    material.color = this.colors[Math.floor(Math.random()*this.colors.length)]
    return material
  };
  console.log(this.materials);
}));

我不知道你在代码中实际在哪里设置背景颜色,但它看起来像这样:

<div class="col-md-6 col-xl-4" *ngFor="let material of materials" [style.background]="material.color">

关于angular - 我正在使用 *ngFor 来迭代卡片布局中的元素。我想随机改变他们的背景颜色有什么办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51257150/

相关文章:

javascript - PrimeNG 从其他模块推送面包屑中的项目

javascript - SheetJS:将行值从数组转置到对象

.net - 将 ngx-toastr 与 Angular 6 和 .net core 2 项目一起使用

angular - ng-reflect-model 显示正确值但未反射(reflect)在输入中

angular - 在 Angular2 路由中从子组件调用 router.parent.navigate 方法时未触发组件构造函数和路由器生命周期 Hook

Angular2 RC6 HttpModule 手动注入(inject)

Angular 6 如何在应用程序组件加载之前加载服务?

angular - 使用@ContentChildren() 访问每个 ng-template 名称

javascript - 如何通过比较id来合并三个不同的数组?在 Angular 6

javascript - RxJs:有 observable 由 2 个独立的 observables 触发