簡體   English   中英

在 Angular 中推送 FormArray 內的 FormGroup 反應式 Forms

[英]Push FormGroup inside FormArray in Angular Reactive Forms

我有 formArray 其中將包含一些價格調整規則。 每個規則將包含一個 FormGroup,每個 FormGroup 有 4 個 formControl。 當我嘗試推送 FormGroup 時,FormArray 收到此錯誤Argument of type 'FormGroup<any>' is not assignable to parameter of type 'never'

public rules = new FormArray([]);
private getRuleFormGroup(): FormGroup {
   return this._formBuilder.group({
    from: new FormControl('', {
       nonNullable: true,
       validators: [Validators.required]
    }),
    to: new FormControl('', {
       nonNullable: true,
       validators: [Validators.required]
    }),
    increaseBy: new FormControl('', {
       nonNullable: true,
       validators: [Validators.required]
    }),
    increaseType: new FormControl('', {
       nonNullable: true,
       validators: [Validators.required]
    })
   });
}
private addNewRule(): void {
   const group = this.getRuleFormGroup();
   this.rules.push(group); //Getting error here
}

嘗試:

this.rules.controls.push(group);

正如 FormGroups 將自己組織成控件一樣,FormArrays 也是如此,每個控件都是一個 FormGroup 甚至是一個松散的 FormControl。

您會收到上述錯誤,因為默認情況下,反應式 forms 是從 Angular 14 嚴格鍵入的

解決編譯錯誤:

  1. FormGroup創建一個類型。

  2. rules類型指定為FormArray<FormGroup<RuleForm>>

  3. 修改getRuleFormGroup簽名以返回FormGroup<RuleForm>的類型。

interface RuleForm {
  from: FormControl<string>;
  to: FormControl<string>;
  increaseBy: FormControl<string>;
  increaseType: FormControl<string>;
}
public rules: FormArray<FormGroup<RuleForm>> = new FormArray<
    FormGroup<RuleForm>
  >([]);

private getRuleFormGroup(): FormGroup<RuleForm> {
  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM