如何使用angular设置数组形式的值

LLa*_*aza 3 angular angular-reactive-forms

我想在数组中设置值,如下所示:

this.form.controls[name].setValue('name')
Run Code Online (Sandbox Code Playgroud)

但我正在使用数组表单,这是行不通的,即使我传递特定数组表单的索引

例如,这是我的表单数组,我想要做的是在函数中设置值

user: FormGroup;
  users: FormGroup;

  constructor(private fb: FormBuilder) {}
  ngOnInit() {
    this.user = this.buildGroup();
    this.users = this.fb.group({
      data: this.fb.array([this.user])
    });
  }
  get fData() {
    return this.users.get('data') as FormArray;
  }
  buildGroup() {
    return this.fb.group({
      name: ['', [Validators.required, Validators.minLength(2)]],
      account: this.fb.group({
        email: ['', Validators.required],
        confirm: ['', Validators.required]
      })
    });
  }
setValue(index) {
   this.fData[index].controls[name].setValue('name')
  }
  onSubmit() {
    this.fData.push(this.buildGroup());
    const {valid, value} = this.fData;
    console.log(valid, value);
  }
Run Code Online (Sandbox Code Playgroud)

但是this.fData [index] .controls [name] .setValue('name')这个不起作用

Deb*_*ahK 20

对于数组,您需要使用setControl.像这样的东西:

    this.productForm = this.fb.group({
        productName: ['', [Validators.required,
                           Validators.minLength(3),
                           Validators.maxLength(50)]],
        productCode: ['', Validators.required],
        starRating: ['', NumberValidators.range(1, 5)],
        tags: this.fb.array([]),
        description: ''
    });

    ...

    // Update the data on the form
    this.productForm.patchValue({
        productName: this.product.productName,
        productCode: this.product.productCode,
        starRating: this.product.starRating,
        description: this.product.description
    });
    this.productForm.setControl('tags', this.fb.array(this.product.tags || []));
Run Code Online (Sandbox Code Playgroud)

  • 在您的多元视野中,我一定错过了;-) (2认同)
  • “Angular: Reactive Forms”课程?希望它有帮助! (2认同)

Nir*_*ali 7

这是我在 formArray 的特定表单控件中手动设置值并为我工作所做的工作。我已formArray命名为bundleDetails.

   this.formBuilderObj['bundleDetails'] = 
   this.formBuilder.array([this.createBundleItem()]);

    createBundleItem(): FormGroup {
    return this.formBuilder.group({
     bsku: ['', Validators.required],
     bqty: ['', Validators.required],
     bprice: ['', Validators.required]
    });
   }
Run Code Online (Sandbox Code Playgroud)

设置 bsku 控件值的方法(其中 index 是[formGroupName]="i"从 html 文件传递​​的)。

   setSku(sku: string, index: number) {
   const faControl = 
   (<FormArray>this.pmForm.controls['bundleDetails']).at(index);
   faControl['controls'].bsku.setValue(sku);
  }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。快乐编码。