(角度)单击按钮会突出显示另一个按钮,因为我正在更改数组中的值。为什么?

阿尔佩拉

因此,我试图使用Angular创建一个网站,并且遇到了一个非常特殊的错误。基本上我有一个* ngFor div,它创建12个按钮。

<div *ngFor = "let color of colors; let i = index" style = "display: inline;">
  <button (click) = "toggleTrue(i)" id = "{{i}}" class = "coloredButton">
  </button>
</div>

单击按钮后,它应突出显示该按钮,然后像这样在我的组件中更改数组中的值。

toggleTrue(id: number){
    this.colors[id] = !this.colors[id];
    var button = document.getElementById(id.toString());
    if(this.colors[id] === true){
      button.style.border = "10px";
      button.style.borderColor = "white";
      button.style.borderStyle = "solid";
    }
    else{
      button.style.borderStyle = "none";
    }
}

但是由于某种原因,每当我单击一个按钮时,它都会高亮显示其旁边的按钮;如果单击两次超过两次,则由于某种原因,它将高亮显示一个按钮两个按钮,请再次单击两次,它将高亮显示一个按钮三个按钮等等。它没有突出显示右键,但是它传递给函数的id是正确的,我使用console.log(id)进行了检查。

我已经弄乱了一些(取出类,行和其他内容),并且将问题隔离到此行。

this.colors[id] = !this.colors[id];

如果我删除了它,那么一切工作正常(当然,我不能再编辑数组的值了)。当我删除按钮的单击功能并且按钮的默认突出显示正确突出显示右侧按钮时,这一点得到了进一步证明。谁能帮我一下,告诉我为什么突出显示不正确?任何帮助,将不胜感激。如果您很好奇,我会在组件中使用colors = []创建数组,这是我使用基本的for循环在构造函数中填充的布尔数组。

drk3931

https://codesandbox.io/s/crimson-brook-wn3q0?file=/src/app/app.component.html

这是带有解决方案的沙箱。本质上,您希望通过使用NgClass或NgStyle来保持模板样式,并仅将组件用于更改状态,避免由于生命周期问题而直接访问DOM。

打字稿

export class AppComponent {
  colors: boolean[];

  constructor() {
    this.colors = [];
    for (let i = 0; i < 10; i++) {
      this.colors.push(false);
    }
  }

  toggleTrue(id: number) {
    this.colors[id] = !this.colors[id];
  }
}

的HTML

<div>
  <div *ngFor="let color of colors; index as i">
    <button
      (click)="toggleTrue($event, i)"
      id="{{i}}"
      [ngClass]="{'active':colors[i]==true}"
    >
      button
    </button>
  </div>
</div>

的CSS

.active {
  color: red;
}

.inactive {
  color: blue;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我可以从另一个模块更改数组的值,但不能更改变量的值

iOS Swift-为什么当一个按钮覆盖另一个按钮时,单击一个按钮会激活另一个按钮

一次单击按钮会触发Android RecyclerView中的另一个按钮

为什么在调用另一个函数时此char数组会更改值?

为什么更改一个输入中的值也会更改另一个输入中的值?

从角度 4 中的另一个组件按钮触发按钮单击

我的活动中有两个按钮,单击它们中的两个应该取消突出另一个按钮

我如何处理位于 JavaFX 中另一个按钮中的按钮单击?

当我更改另一个数组中的值时,数组中的值也会更改吗?

当我单击按钮?在edittext中插入的值应该是合计值,并在SELECT QUERY帮助下计算以在另一个edittext中显示。

我可以用另一个查询结果更改数组的值吗

为什么单击一个按钮会影响jQuery Ajax中的所有按钮

我还有另一个问题,如果我单击两个按钮,为什么两个按钮都返回不正确?

无法单击“继续”按钮。它正在单击另一个按钮

为什么更改我的计算器的“按钮网格”中突出显示的按钮会导致之前突出显示的按钮文本消失?

在gui按钮上时,将按钮置于另一个按钮上时不可单击,为什么?

为什么单击在单击另一个按钮后创建的按钮时会使用 PHP 删除?

当我在android studio中单击“显示布局装饰”按钮时,为什么预览会更改?

单击另一个按钮时如何更改一个按钮的操作(SwiftUI)?

为什么此按钮与RelativeLayout中的另一个按钮无法正确对齐?

单击同一类中的另一个按钮时,通过 jquery 更改按钮的类更改回

单击按钮以显示另一个按钮和相反的按钮

在 React 中单击另一个组件中的按钮后如何显示 Modal?

在导航到另一个片段并使用Kotlin中的“后退”按钮返回后,为什么片段中的EditText显示相同的值?

单击另一个元素Selenium中的按钮

当我单击C#中的另一个按钮时如何调用按钮单击事件

如何更改另一个类中单击的按钮的文本?(Python-tkinter)

如何在按钮单击事件中更改另一个表单名称

单击另一个组件中的按钮时,如何显示/隐藏React组件?