我有一个列表,使用angular-material
(角度7)将其显示为复选框。下面,我将为.html
和.ts
文件添加代码片段。
每当我单击一个复选框时,它都会被选中,但随后立即被取消选中。我进入调试模式,然后看到当我单击一个复选框时,我的isSelected()
方法被Angular调用了4次。当我单击它时,它立即进入检查状态。然后仍然检查Angular第二次调用它。第三次,它变为未选中状态(同时isSelected()
仍然为true)。我无法弄清楚我做错了什么。我试过的是:
isSelected()
方法切换到类属性(在isSelected
对象上添加了myListItem
布尔字段)checked
切换到ngModel
没有任何帮助。还有什么可以尝试的,我不知道。请帮帮我。
html
代码段:
class MyListItem {
id: number
name: string
}
// omitted annotations
export class MyComponent implements OnInit, OnDestroy {
myList: MyListItem[] = [] // omitted initialization
isSelected(myListItem: MyListItem): boolean {
return this.myList.includes(myListItem)
}
toggle(myListItem: MyListItem): void {
// omitted the code, I debugged it and it works correctly:
// it adds/removes the item to/from the list
}
}
<mat-list>
<mat-list-item *ngFor="let myListItem of myList">
<mat-checkbox flex="100" (click)="toggle(myListItem)"
[checked]="isSelected(myListItem)">
{{ myListItem.name }}
</mat-checkbox>
</mat-list-item>
</mat-list>
答案 0 :(得分:2)
使用change
事件而不是click
:
<mat-checkbox flex="100" (change)="toggle(myListItem)"
[checked]="isSelected(myListItem)">
{{ myListItem.name }}
</mat-checkbox>
答案 1 :(得分:1)
我不确定这是否行得通,但是您可以将Event参数添加到切换功能。
toggle(myListItem: MyListItem, event: any) { event.preventDefault() }
然后在您的HTML中:
(click)="toggle(myListItem, $event)"
再次,不确定是否能正常工作,但我发现有时这些点击事件会自动发生,除非调用了prevent default()函数