Angular2 Reactive Forms formControl用于单选按钮

Mik*_*der 37 angular angular-reactive-forms angular-forms

我正在使用Reactive Forms在Angular2中构建一个表单.我正在使用FormBuilder来创建一组字段.对于文本框,这非常有效.但我找不到单选按钮的formControl.

这是如何运作的?我应该<input formControlName="gender" type="radio">像文字输入那样做吗?

Cha*_*ang 35

在组件中,将单选按钮定义为表单的一部分:

export class MyComponent {
  form: FormGroup;
  constructor(fb: FormBuilder){
    this.form = fb.group({
      gender: ""
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

在组件HTML中,构建表单:

<div class="form-group">
  <label>Please select your gender</label>
  <div class="row">
    <label class="md-check">
      <input type="radio" value="female" name="gender" formControlName="gender">
      Female
    </label>

    <label class="md-check">
      <input type="radio" value="male" name="gender" formControlName="gender">     
      Male
    </label>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我假设您知道如何使用提交按钮构建整个表单,此处未显示.

提交表单后,您可以在此处获取单选按钮的值:

let genderValue = this.form.value.gender;
Run Code Online (Sandbox Code Playgroud)

根据检查的单选按钮,这将是"女性"或"男性".

希望这对你有所帮助.祝好运!

  • 我认为指出名称和formControlName必须与代码中的名称和formControlName相同 - 对于两个无线电都是如此.一些可能会错过的微妙点. (4认同)
  • 2其他有用的观点 - (1)如果你愿意,你仍然可以包括一个(改变)事件,尽管你还是会订阅这些改变,所以不确定这是否有意义.(2)在你的代码中你不能像使用[(ngModel)]那样绑定值,如[value] ="" - 所以请记住删除[] around值,如@Chang所示 (2认同)
  • 不是与其他答案冲突,而是在我自己的测试中,我发现在fb.group函数中设置默认值时,确实需要模板中的“ []”值。 (2认同)

Pau*_*tha 33

我应该<input formControlName="gender" type="radio">像文字输入那样做吗?

是.

这是如何运作的?

表单控件指令使用ControlValueAccessor指令与本机元素进行通信.ControlValueAccessors每种可能的输入都有不同的类型.正确的一个由selector值访问器指令选择.该选择是基于什么样type<input>是.如果有type="radio",则使用无线电的值访问器.


Cli*_*iff 6

我注意到了一个关于响应式表单的小内容。如果该值为整数,则需要将其更改为字符串,否则将不会选择单选按钮。

  this.jobForm = this._fb.group({
                    id: [res["job"]["id"]],
                    job_status: [res["job"]["job_status"]**["id"].toString()**,Validators.required],
                    title: [res["job"]["title"],Validators.required]
                });
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过使用[]设置输入的值来解决这个问题,例如[** [value] =“ 0” **而不是** value =“ 0” **。 (2认同)