typescript 使用Angular 为13的多个对象的现有数组初始化表单数组时,找不到路径错误的控件

lokaqttq  于 2023-01-21  发布在  TypeScript
关注(0)|答案(1)|浏览(70)

你好,我是新的Angular ,我希望初始化与现有的数组形式数组由多个对象在Angular 。我得到以下错误
找不到路径为的控件:'变量-〉0 -〉标识'

以下是我的HTML:

<form [formGroup]="myForm">
  <div formArrayName="box">
    <div *ngFor="let b of getForm(); let i = index">
      <fieldset [formGroupName]="i">
        <legend> <h3>FRUIT DETAILS {{ i + 1 }}:</h3>  </legend>
        <label>Fruit Name: </label>
        <input [formControlName]="name" />
        <label>Fruit Value: </label>
        <input [formControlName]="value" />
      </fieldset>
    </div>
  </div>
  <br />
</form>

<pre>{{ myForm.value | json }}</pre>

这是我的TS

myForm: FormGroup;

  constructor(private fb: FormBuilder) {}

  ngOnInit() {
    this.myForm = this.fb.group({
      box: this.fb.array([]),
    });

    let fruits = {
      data: [{name: 'Apple', value: 10}, {name: 'Orange', value: 5},{name: 'Banana', value: 20}]
    };

    for (let f of fruits.data) {
      const control = <FormArray>this.myForm.get('box');
    control.push(this.fb.group({name: f.name, value: f.value}));

    console.log(f);

    }

    this.myForm.patchValue({ box: fruits.data });
    //console.log(this.myForm.value);
  }

  getForm(): any {
    return this.myForm.get('box')['controls'];
  }
nimxete2

nimxete21#

我改变了两件事让它工作:
TS文件中,我重构了getForm()方法,因为在我的新Angular 15项目中,您的代码似乎不再是可执行的。因此,您可以通过如下修改来防止潜在的未来问题:

getForm(): any {
    const form = this.myForm.get('box') as FormArray;
    return form['controls'];
}

HTML文件中,我删除了formControlName周围的括号,因为否则namevalue将被解释为变量而不是字符串:

<form [formGroup]="myForm">
    <div formArrayName="box">
      <div *ngFor="let b of getForm(); let i = index">
        <fieldset [formGroupName]="i">
          <legend> <h3>FRUIT DETAILS {{ i + 1 }}:</h3>  </legend>
          <label>Fruit Name: </label>
          <input formControlName="name" />
          <label>Fruit Value: </label>
          <input formControlName="value" />
        </fieldset>
      </div>
    </div>
   <br />
</form>

相关问题