【问题标题】:Radio button: using [formControl] instead of [formControlName]单选按钮:使用 [formControl] 而不是 [formControlName]
【发布时间】:2021-05-05 12:20:23
【问题描述】:

假设我在 Angular 组件中有以下表单。 3 个表单控件是单选按钮:

form = new FormGroup({
    formControl: new FormControl(),
    formControl2: new FormControl(),
    formControlName: new FormControl()
});

在模板上创建单选按钮时,我见过的所有示例都使用[formControlName],如下所示:

<form [formGroup]="form">
    <input
        type="radio"
        id="formControlNameTrue"
        [formControlName]="'formControlName'"
        [value]="true"
    >
    <label for="formControlNameTrue">FCN True</label>
</form>

但是,我想改用[formControl]

<input
    type="radio"
    id="formControlTrue"
    [formControl]="formControl"
    [value]="true"
>
<label for="formControlTrue">FC True</label>

问题在于,当使用[formControl] 方法使用2 个或更多单选按钮时,模板无法正确显示控件的值。在下面的屏幕截图中,我用鼠标选择了“FC True”,然后选择了“FC2 False”。这两个控件都是使用[formControl] 构建的。结果如下:

有关完整代码,请参阅以下 stackblitz:https://stackblitz.com/edit/angular-3gbgbp

有没有办法只用[formControl] 创建一个单选按钮?如果不是,这是预期行为还是可能是错误?

【问题讨论】:

  • [formControl]="form.get('formControl')",但是remove这个[value],value就是formControl的值
  • [value] 是指定当您选择该单选按钮时 FormControl 将具有的值所必需的。
  • 抱歉,您是对的 - 我将复选框与单选按钮混合在一起,抱歉

标签: angular radio-button angular-reactive-forms angular-forms


【解决方案1】:

不需要使用属性绑定试试下面的代码。

 form: FormGroup = new FormGroup({
    formControl: new FormControl(),
    formControl2: new FormControl(),
    formControlName: new FormControl()
  });

  get formControl() {
    return this.form.get("formControl");
  }

  get formControl2() {
    return this.form.get("formControl2");
  }

  get formControlName2() {
    return this.form.get("formControlName");
  }

  constructor() {
    this.form.valueChanges.subscribe(changes => {
      console.log(changes);
    });
  }

HTML

<form [formGroup]="form">
    <div>
        <input
      type="radio"
      id="formControlTrue"
      formControlName="formControl"
      [value]="true"
    >
        <label for="formControlTrue">FC True</label>
        <input
      type="radio"
      id="formControlFalse"
      formControlName="formControl"
      [value]="false"
    >
        <label for="formControlFalse">FC False</label>
    </div>
    <div>
        <input
      type="radio"
      id="formControl2True"
      formControlName="formControl2"
      [value]="true"
    >
        <label for="formControl2True">FC2 True</label>
        <input
      type="radio"
      id="formControl2False"
      formControlName="formControl2"
      [value]="false"
    >
        <label for="formControl2False">FC2 False</label>
    </div>
    <input
    type="radio"
    id="formControlNameTrue"
    formControlName="formControlName"
    [value]="true"
  >
    <label for="formControlNameTrue">FCN True</label>
    <input
    type="radio"
    id="formControlNameFalse"
    formControlName="formControlName"
    [value]="false"
  >
    <label for="formControlNameFalse">FCN False</label>
</form>

【讨论】:

  • 正如我在最后一个问题中所说,这正是我要避免的。
  • 为什么要避免使用formControlName 而使用[formControl]
猜你喜欢
  • 2013-04-17
  • 2013-07-06
  • 2013-04-10
  • 2017-02-18
  • 2020-04-28
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多