angular - Angular:为什么复选框的(更改)事件仅在双击后触发?
问题描述
我有一个带有复选框列表(mat-checkbox)的 Angular 应用程序,可以根据区域设置正确显示英语或西班牙语值。
问题:但是,当用户单击复选框时,复选框本身并没有被始终选中。它似乎需要双击。什么可能导致这样的事情?
我试过了:
- 我研究了 [checkex] 和 (change)。
- 我试过改变我的对象/类/接口。
- 我查看了 Angular 文档。
- 我已经在我能找到的所有内容上完成了 console.log
- 我浏览了 SO 文章,例如: Mat-checkbox checked not changed checkbox state
组件.html:
<div class="student-history-checkbox" *ngFor="let item of gradesInCurrentLanguage()">
<mat-checkbox [checked]="isChecked(item.ID)" (change)="onChangeCB($event, item.ID)">{{item.Value}}</mat-checkbox>
</div>
组件.ts:
public gradesInCurrentLanguage() : CGenericRecord[] {
return this.ms.XFormForLocale(this.grades, this.localeId);
}
isChecked(ID : number)
{
return (this.gradeInfo.Grades.indexOf(ID) > -1) ? true : false;
}
onChangeCB(event : any, id : number)
{
if(event.checked && this.gradeInfo.Grades.indexOf(id) == -1){
this.gradeInfo.Grades.push(id);
}else{
let index = this.gradeInfo.Grades.indexOf(id);
this.gradeInfo.Grades.splice(index, 1);
}
}
接口.ts:
export class CGenericRecord
{
constructor(
public ID: number,
public Value: string)
{}
}
export interface GenericTranslationRecord {
ID : number,
Value : string,
SpanishValue: string
}
服务.ts:
public XFormForLocale(grades: GenericTranslationRecord[], localeId: string) : CGenericRecord[] {
let recs :CGenericRecord[] = [];
for (let g of grades)
{
recs.push( new CGenericRecord(d.ID, localeId === "es" ? d.SpanishValue : d.Value));
}
return recs;
}
预期结果:当用户单击一次复选框时,复选框应显示已选中。它还应该显示它在单击后未选中。
实际结果:复选框仅在多次单击后才被选中
解决方案
上面的代码导致了一个无限循环。我没有在 ngFor 中使用该方法,而是在 typescript 中创建了一个变量并将其设置为 = 方法。然后我在 HTML 中使用了该变量。现在可以了。
HTML:
<div class="student-history-checkbox" *ngFor="let item of gradesInCurrentLanguageVar">
TS:
this.gradesInCurrentLanguagevar = gradesInCurrentLanguage();
推荐阅读
- c - 用于 AVX2 的 gcc 目标禁用 SSE 指令集
- django - 如何更改 django 模型中的默认时间格式
- javascript - 如何为响应式菜单的下拉菜单设置动画?
- java - 解决点击intellij上的库?
- javascript - 使用材料的 GridList 选择正确的项目
- reactjs - 如何在运行 React 的 Chrome 扩展中运行 Redux DevTools 扩展?
- postgresql - 使用 Flask 在 App Engine 中将 Docker 容器连接到 PostgreSQL 的问题
- c++ - ofstream 不断给我函数的最后一行,而不是显示所有内容
- vba - 导入文件夹中的所有 CSV 文件
- python - Django filter and select date only from datetime