给定绑定到相同formControlName的复选框列表,我如何才能生成绑定到formControl的复选框值数组,而不仅仅是true/false呢?

Example:

<form [formGroup]="checkboxGroup">
    <input type="checkbox" id="checkbox-1" value="value-1" formControlName="myValues" />
    <input type="checkbox" id="checkbox-2" value="value-2" formControlName="myValues" />
    <input type="checkbox" id="checkbox-3" value="value-2" formControlName="myValues" />
</form>

100 currently produces:

true or false

What I want it to produce:

['value-1', 'value-2', ...]

推荐答案

在silentsod answer的帮助下,我编写了一个在formBuilder中获取值而不是状态的解决方案.

我使用一种方法在formArray中添加或删除值.这可能是一个糟糕的方法,但它是有效的!

component.html

<div *ngFor="let choice of checks; let i=index" class="col-md-2">
  <label>
    <input type="checkbox" [value]="choice.value" (change)="onCheckChange($event)">
    {{choice.description}}
  </label>
</div>

component.ts

// For example, an array of choices
public checks: Array<ChoiceClass> = [
  {description: 'descr1', value: 'value1'},
  {description: "descr2", value: 'value2'},
  {description: "descr3", value: 'value3'}
];

initModelForm(): FormGroup{
  return this._fb.group({
    otherControls: [''],
    // The formArray, empty 
    myChoices: new FormArray([]),
  }
}

onCheckChange(event) {
  const formArray: FormArray = this.myForm.get('myChoices') as FormArray;

  /* Selected */
  if(event.target.checked){
    // Add a new control in the arrayForm
    formArray.push(new FormControl(event.target.value));
  }
  /* unselected */
  else{
    // find the unselected element
    let i: number = 0;

    formArray.controls.forEach((ctrl: FormControl) => {
      if(ctrl.value == event.target.value) {
        // Remove the unselected element from the arrayForm
        formArray.removeAt(i);
        return;
      }

      i++;
    });
  }
}

例如,当我提交表单时,我的模型如下所示:

  otherControls : "foo",
  myChoices : ['value1', 'value2']

只缺少一件事,即如果模型已经有判断值,则填充formArray的函数.

Angular相关问答推荐

如果输入带有观察对象,检测ngOnChanges中SimpleChanges的变化

导致无限请求的Angular HttpInterceptor和HttpClientModule

TransLoco合并本地和服务器端转换对象

独立Angular 零部件不在辅零部件或共享零部件中工作

NG-BOOTSTRAPP SCROLLESPY没有高度就不能工作?

在Angular 17独立模式下,如何使用Swiper 11.0.5版使Bootstrap下拉菜单在Swiper元素外部可见

Angular react 形式验证问题

无法在Mat-SideNav中绑定模式

Angular 17水化-POST请求同时触发客户端/服务器端,而GET请求仅触发服务器端?

一次重定向后,所有子路由都处于活动状态

如何正确导出/导入枚举和接口文件以便 Jest 成功完成测试?

Angular Signals 如何影响 RXJS Observables 以及在这种情况下变化检测会发生什么

Angular ngSubmit 不起作用(内部按钮和导入模块)

Angular:显示带有嵌套子项的内容投影

Angular CLI 自定义 webpack 配置

如何在 bootstrap Angular 2 应用程序时调用休息 api

Angular 7 测试:NullInjectorError:No provider for ActivatedRoute

读取文件并解析其内容

测试一个包含 setTimeout() 的函数

ng add 与 npm install 在 Angular 6 中的区别