使用反应形式将复选框绑定到值而不是true/false

Joe*_*oel 13 angular2-forms angular

我正在尝试使用反应/模型驱动形式的一个简单示例.我想将一个复选框数组绑定到值列表,而不是布尔值列表.

这个plunker显示了这个问题:http ://plnkr.co/edit/a9OdMAq2YIwQFo7gixbj?p=preview 绑定到表单的值是布尔值,我想答案是这样的["value1", "value2", etc]

我有类似的东西,但我不知道如何得到我想要的结果?

模板:

<form [formGroup]="checkboxGroup">
    <input *ngFor="let control of checkboxGroup.controls['myValues'].controls" 
    type="checkbox" id="checkbox-1" value="value-1" [formControl]="control" />
</form>
Run Code Online (Sandbox Code Playgroud)

和组件:

let checkboxArray = new FormArray([
  new FormControl({checked: true, value: "value1"}),
  new FormControl({checked: false, value: "value2"}))]);

this.checkboxGroup = _fb.group({
  myValues: checkboxArray
});
Run Code Online (Sandbox Code Playgroud)

Mil*_*lad -3

复选框值要么已选中 ( true ),要么未选中 ( false )。一般来说,复选框具有另一个值是没有意义的,但如果您仍然想这样做,则需要编写自己的复选框值评估器。

  • 这让我很沮丧,我不明白为什么 Angular 会这样做。[根据 MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#value),HTML 可以有一个值,并且只有在该元素被“选中”时才会提交(值不限于 bool)。如果您最初设置它,它可以在 Angular 中工作,但是一旦您手动单击该复选框一次,该值就会丢失并转换为简单的布尔值。 (3认同)
  • 愿意进一步详细说明吗?如果我搜索 [CheckboxValueAssessor](https://www.google.com/search?q=angular2+CheckboxValueAssessor) 我会得到这个答案。 (2认同)
  • 我的 *model* 可能需要字符串“Y”或“N”,那么为什么我不能动态设置其“[checked]”和“[value]”属性并保留该字符串我的“[(ngModel)]”? (2认同)