如何获取默认选中复选框的值

How to get the values of default checked checkbox

我正在做一个包含多个复选框的项目。在那里,我希望从一开始就检查复选框,并将值放在表单中(我使用的是反应式表单)。用户可以根据自己的意愿取消选择框,数据将相应地存储。这是项目的stackblitz。在那里我能够从一开始就选中该复选框,但是当我点击提交按钮时,当我控制台登录时没有数据。我认为这是一些有约束力的问题,但我无法弄清楚到底是什么问题。 有人可以帮忙吗? 提前致谢。

这是代码:

<form [formGroup]="form" (ngSubmit)="submit()">
  <div class="form-group">
    <label for="website">Website:</label>
    <div *ngFor="let web of websiteList">
      <label>
        <input
          type="checkbox"
          [value]="web.id"
          (change)="onCheckboxChange($event)"
          [checked]="web.isSelected"
        />
        {{ web.name }}
      </label>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit</button>
</form>
  form: FormGroup;
  websiteList: any = [
    { id: 1, name: 'HDTuto.com', isSelected: true },

    { id: 2, name: 'HDTuto.com', isSelected: true },

    { id: 3, name: 'NiceSnippets.com', isSelected: true },
  ];

  constructor(private fb: FormBuilder) {
    this.form = this.fb.group({
      website: this.fb.array([], [Validators.required]),
    });
  }

  ngOnInit() {}
  onCheckboxChange(e: any) {
    const website: FormArray = this.form.get('website') as FormArray;
    console.log('checking ->', e);

     if (e.target.checked) {
      website.push(new FormControl(e.target.value));
      console.log('website ->', website);
    } else {
      //console.log(e);
      const index = website.controls.findIndex((x) => {
        console.log('x.value ->', x.value);
        console.log('target.value ->', e.target.value);
        x.value === e.target.value;
      });

      website.removeAt(index);
    }
  }
  submit() {
    console.log(this.form.value);
  }

https://stackblitz.com/edit/angular-ivy-qar4ph?file=src/app/app.component.ts 注意模板变化:

  1. 为复选框包装器添加了 formArrayName 属性,为输入元素添加了 formControlName 属性。
  2. 删除了 changechecked 属性

组件ts文件中:

  1. 添加了初始表单数组值
  2. 添加映射到提交方法
  3. 删除了 onCheckboxChange 方法