【问题标题】:Angular 5 build form array from JSON resultAngular 5 从 JSON 结果构建表单数组
【发布时间】:2019-03-26 16:27:39
【问题描述】:

我在使用 Angular 表单数组时遇到以下问题,我想知道是否有人可以帮助我,因为我是 Angular 的新手?

抱歉,由于项目的复杂性(大量的依赖项和复杂的代码),我无法提供 plunker,但我会尽我所能提供尽可能多的细节!

我有一个来自服务调用的 JSON 响应,其中包含一组字段(称为“myFields”),例如:

0:
name: "field1"
1:
name: "field2"

我从对 API 的调用中获得此响应,我需要使用响应中的字段构建一个表单。我目前正在遍历此响应并尝试构建一个表单数组,如下所示:

constructor(private formBuilder: FormBuilder){

    this.myFormGroup = this.formBuilder.group({
        aliases: this.formBuilder.array([
        ])
    });

}

get aliases() {
    return this.myFormGroup.get('aliases') as FormArray;
}

getServiceFields(){

    *call to get fields and store in "myFields"*
    for (let item of myFields) {
        this.aliases.push(this.createGroup(item));
    }
}

createGroup(item): FormGroup {
    return this.formBuilder.group({
        name: new FormControl(item.name)
    });
}

在我看来,我有:

<div [formGroup]="myFormGroup" class="example-form">
    <div formArrayName="aliases" >
    <div *ngFor="let field of myFormGroup.controls.aliases.controls; 
    let i=index">

        <mat-form-field>
            <input matInput placeholder="{{field.value.name}}"
            formControlName="{{field.value.name"}}>
        </mat-form-field>

我遇到的问题是页面上没有显示任何内容,这是我在控制台窗口中看到的错误:

Error: Cannot find control with path: 'aliases -> name'

我还将在控制台窗口中附上一张显示我的 FormGroup 结构的屏幕截图:

FormGroup structure

希望这是足够的信息,如果需要更多详细信息,我可以提供。有人知道我哪里出错了吗?谢谢!

编辑:我无法对 formControlName(例如 formControlName="name")进行硬编码,因为我正在遍历“别名”中的控件列表,这就是我尝试使用 {{field.value.name}} 的原因

【问题讨论】:

    标签: arrays json angular formarray angular-formbuilder


    【解决方案1】:
      <div *ngFor="let field of myFormGroup.controls.aliases.controls; 
        let i=index">
    <div [formGroup]="field">
            <mat-form-field>
                <input matInput placeholder="{{field.value.name}}"
                formControlName="name">
            </mat-form-field>
            </div>
    

    在你的 html 中替换上面的代码。

    问题是你没有在 formcontrolname 之前绑定 formgroup。 formcontrolname 应该在 formgroup 下工作。

    如果您有任何问题,请告诉我。

    【讨论】:

    • Ajay,非常感谢您的快速回复,成功了!这让我发疯了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2018-07-18
    • 2023-03-21
    相关资源
    最近更新 更多