angular - 以 react 形式创建表单控制组

标签 angular angular-reactive-forms

尝试为响应式表单创建 html,但我总是出错

这是我的表格

 private buildForm(): void {
    this.formOperational = this.formBuilder.group({
      comment: [this.expertOperational.comment],
      workingDays: new FormArray([])
    });
  }

  private createWorkignDays(): void {
    this.operational.workingDay.forEach((day: WorkingDay) => {
      this.workHoursControls.push(
        this.formBuilder.group({
          weekDay: [day],
          operationalAM: this.formBuilder.group({
            fixed: [day.operationalAM.fixed],
            startTime: [day.operationalAM.startTime],
            endTime: [day.operationalAM.endTime]
          }),
          operationalPM: this.formBuilder.group({
            fixed: [day.operationalAM.fixed],
            startTime: [day.operationalAM.startTime],
            endTime: [day.operationalAM.endTime]
          })
        })
      );
    });
  }

当我使用 HTML 时,我会尝试这样的操作

<form [formGroup]="formOperational">
    <div class="row pb-1" *ngFor="let day of formOperational.get('workingDays').controls; let i = index;">
        <div class="col-lg-2 col-sm-2 col-md-2 justify-content-center align-self-center">
            {{'Shared.WeekDay.' + day.weekDay | translate }}
        </div>
        <div class="row" [formGroup]="i">
            <div class="text-center col">
                <input type="checkbox" formControlName="fixed">
            </div>
        </div>
        <div class="col">
            <input class="form-control text-center width-70" formControlName="startTime" />
        </div>
        <div class="col">
            <input class="form-control text-center width-70" formControlName="endTime" />
        </div>
    </div>
    <div class="form-group">
        <textarea class="form-control rounded-0" formControlName="comment"
            rows="11">{{expertOperational.comment}}</textarea>
    </div>
</form>

我遇到了错误

ERROR Error: formGroup expects a FormGroup instance. Please pass one in.

       Example:


    <div [formGroup]="myGroup">
      <input formControlName="firstName">
    </div>

    In your class:

    this.myGroup = new FormGroup({
       firstName: new FormControl()
    });
    at Function.push../node_modules/@angular/forms/fesm5/forms.js.ReactiveErrors.missingFormException (forms.js:1443)
    at FormGroupDirective.push../node_modules/@angular/forms/fesm5/forms.js.FormGroupDirective._checkFormPresent (forms.js:5414)
    at FormGroupDirective.push../node_modules/@angular/forms/fesm5/forms.js.FormGroupDirective.ngOnChanges (forms.js:5237)
    at checkAndUpdateDirectiveInline (core.js:22095)
    at checkAndUpdateNodeInline (core.js:23363)
    at checkAndUpdateNode (core.js:23325)
    at debugCheckAndUpdateNode (core.js:23959)
    at debugCheckDirectivesFn (core.js:23919)
    at Object.eval [as updateDirectives] (ExpertOperationalComponent.html:6)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:23911)

有人知道我哪里做错了吗? 谢谢

最佳答案

你说你的HTML不好。你在那里遇到错误吗? 试试这个
删除

*ngFor="let day of formOperational.get('workingDays').controls; let i = index;"

添加
设置一个getter

get controls() {
  return (this.formOperational.get('workingDays') as FormArray).controls;
}

然后在模板中

*ngFor="let day of controls; let i = index"

关于angular - 以 react 形式创建表单控制组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59454216/

相关文章:

angular - 可观察<数组> Angular2

angular - Angular 和 .NET Core 的 SignalR CORS 问题

angular - 获取 indexedDb 配额存储信息

typescript - 将页面/全局变量传递到 Angular2 应用程序以用于服务

javascript - 根据 typescript 中的 'in'条件过滤数组元素

angular - Bootstrap Modal 不显示正确的数据

angular - 获取表单控件的名称

javascript - Angular 7 - 不从模板触发 "valueChanges"(使用 mat-option)

Angular 8 - 表单验证无法正常工作

angular - 无法让 ngx-bootstrap radio 工作,没有值访问器