首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular10 -使用onClick事件更改多个css id

Angular10 -使用onClick事件更改多个css id
EN

Stack Overflow用户
提问于 2020-12-13 21:55:42
回答 1查看 79关注 0票数 0

我在尝试使用(click)事件更改按钮的css时遇到了一些问题。我设法做到了,但问题是我有10个按钮,所以我不能依赖于.ts中的一个变量,因为一旦它改变,它将影响所有10个按钮,而不仅仅是被单击的那个按钮,所以我认为唯一的事情是有10个不同的变量,但这并不是很优雅。有没有更干净一点的方法呢?

这是我到目前为止所得到的:

html:

代码语言:javascript
复制
<button (click)="b1 = !b1" class="tarea" [id]="cambiaId(b1)"></button>
<button (click)="b2 = !b2" class="tarea" [id]="cambiaId(b2)"></button>
<button (click)="b3 = !b3" class="tarea" [id]="cambiaId(b3)"></button>
[...]
<button (click)="b10 = !b10" class="tarea" [id]="cambiaId(b10)"></button>

ts:

代码语言:javascript
复制
export class TareasComponent {
  b1 : boolean = false;
  b2 : boolean = false;
  b3 : boolean = false;
[...]
  b10 : boolean = false;


cambiaId(b : boolean){
    if (b) {
      return "done";
    }else{
      return "todo";
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2020-12-13 23:23:35

我认为你可能有一些合理的理由让元素有重复的id。要在angular中以高性能的方式做到这一点,就需要使用ngFor和trackby。CodeSandbox Implementation上提供了一个示例实现

代码语言:javascript
复制
buttons: ButtonType[] = Array(10)
    .fill("todo")
    .map((value, i) => ({ id: i, value }));

  trackById(index: number, button: ButtonType) {
    return button.id;
  }

  buttonClicked(index: number, button: ButtonType) {
    const ret = this.buttons.slice(0);
    ret[index] = {
      ...button,
      value: button.value ? "done" : "todo"
    };
    this.buttons = ret;
  }
代码语言:javascript
复制
<ng-container *ngFor="let item of buttons; index as i; trackBy:trackById">
    <button [id]="item.value" (click)="buttonClicked(i, item)" class="tarea">
      {{item.value}}
    </button>
  </ng-container>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65276425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档