Angular 我需要一个双面装订机吗?

Angular 我需要一个双面装订机吗?,angular,binding,getter-setter,Angular,Binding,Getter Setter,我已经创建了一个复选框,该复选框具有与getter的双向绑定。我没有setter,因为getter将返回筛选列表的结果 在本地,此解决方案工作正常,但在部署后,我收到以下错误“无法设置[object object]的属性myProperty,该属性在object.handleEvent处只有一个getter” public get myProperty():布尔值{ 返回此.list.every(函数)(项:any){ return item.selected==true; }); } 切换选

我已经创建了一个复选框,该复选框具有与getter的双向绑定。我没有setter,因为getter将返回筛选列表的结果

在本地,此解决方案工作正常,但在部署后,我收到以下错误“无法设置[object object]的属性myProperty,该属性在object.handleEvent处只有一个getter”


public get myProperty():布尔值{
返回此.list.every(函数)(项:any){
return item.selected==true;
});
}
切换选择(事件){
this.list.forEach(h=>(h.selected=event.target.checked));
}
我试图了解发生了什么。当我创建setter并删除更改事件时,它将在部署后工作

<input type="checkbox" class="custom-control-input" id="myId"[(ngModel)]="myProperty""/>

    public set myProperty(checked: boolean) { 
        this.list.forEach(h => (h.selected = checked));
    }
    public get myProperty(): boolean {
        return this.list.every(function(item: any) {
            return item.selected == true;
        });
    }

在角度上,双向绑定意味着:

  • 该变量更改HTML元素(这是绑定的get部分)
  • HTML元素更改变量(这是绑定的部分)
因此,在Angular中正确使用双向绑定是在需要获取和设置时。 在我看来,在您的情况下,您应该使用单向绑定-变量选项来更改HTML,如下所示:

<input type="checkbox" class="custom-control-input" id="myId"
       [checked]="myProperty" (change)="toggleSelection($event)"/>

public get myProperty(): boolean {
    return this.list.every(function(item: any) {
        return item.selected == true;
    });
}

toggleSelection(event) {
    this.list.forEach(h => (h.selected = event.target.checked));
}

public get myProperty():布尔值{
返回此.list.every(函数)(项:any){
return item.selected==true;
});
}
切换选择(事件){
this.list.forEach(h=>(h.selected=event.target.checked));
}

这是角度概念中的正确方法。

谢谢,我错过了示例()中的更改事件。我编辑了我原来的帖子。所以我需要双向绑定。在toggleSelection中,列表会被更新。您还知道为什么这在本地工作而在构建(部署)后不工作吗?@M S我找到了一个解决方案,请参阅更新的帖子。现在我只想知道为什么它不能与我最初的实现一起工作。
<input type="checkbox" class="custom-control-input" id="myId"
       [checked]="myProperty" (change)="toggleSelection($event)"/>

public get myProperty(): boolean {
    return this.list.every(function(item: any) {
        return item.selected == true;
    });
}

toggleSelection(event) {
    this.list.forEach(h => (h.selected = event.target.checked));
}