【问题标题】:Angular 2 dynamically generated form groupAngular 2 动态生成的表单组
【发布时间】:2023-03-24 00:45:01
【问题描述】:

我正在尝试动态生成一个 FormBuilder 组,但我被生成的组对象卡住了。我有以下用于单个 .html 输入字段的组件。

import { Component, onInit } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';

@Component({
    selector: 'app-home',
    templateUrl: './home.component.html',
    styleUrls: ['./home.component.css']
})

export class HomeComponent implements OnInit {
    job: any;

    constructor(
        public formBuilder: FormBuilder
    ) {
        this.job = {
            number: 'J001'
        }
    }

    ngOnInit() {
        const jobGroup: FormGroup = new FormGroup({});
        for (const key in this.job) {
            if (this.job.hasOwnProperty(key)) {
                const control: FormControl = new FormControl(this.job[key], Validators.required);
                jobGroup.addControl(this.job[key], control);
            }
        }

        this.jobForm = this.formBuilder.group(jobGroup);
    }
}

当应用程序加载时,我在控制台中收到以下错误。

Error: Error in ./HomeComponent class HomeComponent - inline template:12:50 caused by: Cannot find control with name: 'number'

home.component.html如下。

<form [formGroup]="jobForm" novalidate>
    <div class="form-group">
      <label class="control-label" for="number">Job Number</label>
      <input type="text" class="form-control" formControlName="number" id="number">
    </div>

    <button class="btn btn-success btn-block">Save Record</button>
</form>

我希望这是我错过的显而易见的事情。

【问题讨论】:

  • 您是否尝试将name 属性添加到您的输入字段?
  • 是的,同样的问题..

标签: angularjs angular typescript formbuilder


【解决方案1】:

我怀疑你这里有两个错误:

1) this.obj[key] 应该是关键

2) 你不需要用参数FormGroup调用formBuilder.group

const jobGroup: FormGroup = new FormGroup({});
for (const key in this.job) {
  if (this.job.hasOwnProperty(key)) {
    const control: FormControl = new FormControl(this.job[key], Validators.required);
    jobGroup.addControl(key, control); // instead of this.obj[key]
  }
}

this.jobForm = jobGroup; // jibGroup is already formGroup

Plunker Example

【讨论】:

  • 感谢您的回答,虽然我仍然遇到同样的错误。
  • 你确定吗?我会做一个plunker
  • 那太棒了!
  • 谢谢。令人讨厌的是,我从构造函数中的承诺中得到了这份工作,这似乎是导致问题的原因。
【解决方案2】:

查看documentation for formControlName

你需要声明formGroup(你已经完成了),以及控件(这部分缺失)。

const jobGroup = new FormGroup({
    // declare number here
    number: new FormControl()
});

【讨论】:

  • 谢谢.. 虽然我仍然收到以下代码的错误。
  • const group = {} for (const key in this.job) { if (this.job.hasOwnProperty(key)) { group[key] = new FormControl(this.job[key]); } } this.jobForm = new FormGroup(group);
猜你喜欢
  • 2020-11-21
  • 2017-10-21
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多