如何将随机类分配给DOM中生成的元素* ng?

问题描述 投票:2回答:3
  <div *ngFor="let project of projects; let i = index;">
    <div class="project-card details-complete */random class/*">
    </div>
  </div>

我有预定义的class = ['teal','pink','green','orange','magenta'];当* ngFor填充DOM时,我想随机分配其中一个类。我试图通过在组件中生成随机0-4数字并指定[class] =“randomClassName():className”来实现,但我在检查错误后更改了表达式。 [ngClass]也没有帮助。有没有办法用指令或其他api实现这个?

angular angular5
3个回答
2
投票
@Directive({
  selector: '[randomColor]'
})
export class RandomColorDirective implements OnInit {
   constructor(private elRef: ElementRef, private renderer: 
   Renderer2) {}
   ngOnInit(): void {
     const COLORS = ['teal', 'pink', 'green', 'orange', 
     'magenta'];
     let randomNumber = Math.floor(Math.random() * 
     COLORS.length);
     this.renderer.addClass(this.elRef.nativeElement, 
     `${COLORS[randomNumber]}`);
  }
}

为了防止有人需要它,我使用上面的指令解决了它。


0
投票

假设项目是您的数组,那么我可以使用此项目的每个颜色映射颜色。我有一组颜色

colors = ['grad1', 'grad2', 'grad3', 'grad4', 'grad5', 'grad6'];

您可以在.scss文件中声明此颜色类,并将此颜色映射到.ts文件中,如下所示

this.projects.map(project => {
          project.color = this.colors[Math.floor(Math.random() * this.colors.length)];
          return project;
        });

还要在.html文件中更新,如下所示

<div *ngFor="let project of projects; let i = index;">
    <div class="project-card details-complete" [ngClass]="project.color">
    </div>
  </div>

0
投票

在你.ts文件中 -

public classValues = ['teal', 'pink', 'green', 'orange', 'magenta']; 

在您的HTML文件中 -

 <div *ngFor="let project of projects; let i = index;">
    <div class="project-card details-complete classValues[i]" 
    [ngClass] = "(index == classValues.length - 1) ? index = 0:''">
    </div>
  </div>
© www.soinside.com 2019 - 2024. All rights reserved.