【发布时间】:2017-11-07 08:50:15
【问题描述】:
我正在创建一个 Angular2 项目,但遇到复选框的双向绑定问题。
我有一个名为 listItem 和 List 的类:
export class ListItem {
public count: number;
public value: string;
public checked: boolean;
constructor(count: number, value: string, checked: boolean) {
this.count = count;
this.value = value;
this.checked = checked;
}
}
export class MyList{
public category: string;
public listItem : ListItem [];
constructor(category: string, listItem : ListItem []) {
this.category = category;
this.listItem = listItem ;
}
}
我正在从 Azure 搜索中调用该列表,该列表运行正常。 问题是当我将值设置为复选框时。
<div *ngFor="let list of myList; let listIndex = index;">
<div *ngFor="let item of list.listItems; let itemIndex = index;">
<input type="checkbox" [name]="list.category + item.value"
(change)="item.checked = !item.checked"
[ngModel]="item.checked" />
</div
</div>
但是 onClick 的值也总是假的。我尝试使用 [(ngModel)] 但也没有工作。 我也试着做一个函数:
(change)="oncheck(listIndex, itemIndex)"
oncheck(listIndex: number, itemIndex: number) {
this.myList[listIndex].listItems[itemIndex].checked =
!this.myList[listIndex].listItems[itemIndex].checked;
}
但我收到了这个错误:
无法分配给对象“[对象”的只读属性“已检查” 对象]'
为什么会这样以及如何解决?谢谢
【问题讨论】:
-
可能重复。您能否详细说明 [(ngModel)] 在您的案例中的表现?它应该可以正常工作。 stackoverflow.com/questions/40214655/…
-
我这样添加它:[(ngModel)]="item.checked" 我总是错误的。没有任何错误。
-
意思是即使你选中了复选框,它仍然是假的?
-
我试过这个例子,但也没有用。为什么我在尝试进行活动时会收到错误消息?
-
是的,最后的'checked'值默认为false。所以无论我检查多少。当我检查调试器并在一个按钮后单击所有复选框返回 false 时,该列表仍然为 false,这是默认设置。我认为绑定的一种方式效果很好,但值的集合不起作用。也许错误消息可能是原因。但我不明白,也不知道为什么。
标签: angular events checkbox two-way-binding