【问题标题】:ngForm variable coming as undefined in componentngForm 变量在组件中未定义
【发布时间】:2021-02-18 07:45:05
【问题描述】:

我创建了一个 angular 表单,并使用模板驱动的方法来控制它。已在组中使用 ngForm,并尝试通过名称访问表单字段,但在控制台引用时出现错误 - this.form 未定义。

我的 html 看起来像 -

<form #createProjectForm="ngForm" (ngSubmit)="save()">
.....
 <mat-form-field appearance="outline">
              <mat-label>NMC/ODA Project No</mat-label>
              <input name="nmcNumbber" matInput autocomplete="off" />
            </mat-form-field>

并且在组件文件中-

    import { Component, OnInit, ViewChild } from '@angular/core';
import { NgForm, Form } from '@angular/forms';

@Component({
  selector: 'app-create-project-details-fields',
  templateUrl: './create-project-details-fields.component.html',
  styleUrls: ['./create-project-details-fields.component.scss']
})
export class CreateProjectDetailsFieldsComponent implements OnInit {
  
  @ViewChild('createProjectForm') createForm : NgForm;
  constructor() { }

  ngOnInit(): void {
    this.getFormStatus();
  }

getFormStatus(){
  this.createForm.controls['nmcNumbber'].disable();
}

但是控制台给出了-

谁能帮我解决这个问题? TIA

【问题讨论】:

  • 我将其更改为 ngAfterViewInit 但我仍然面临错误 -
  • 我不认为这是创建表单的可靠方法。我认为您应该查看有关如何设置模板驱动表单的官方文档。或者只是代码没有显示所有组件。 angular.io/guide/…

标签: javascript angular


【解决方案1】:

ngOnInit 太早了。您需要ngAfterContentInitngAfterViewInit。视图未在 ngOnInit 中创建,@ViewChild('createProjectForm') createForm 尚未设置。

您不能使用controls 来禁用模板驱动表单中的元素。线

this.createForm.controls['nmcNumbber'].disable();

行不通。您可以在模板中使用disable 指令。

<input name="nmcNumbber" matInput autocomplete="off" [disable]="true" />

这是反应式表单和模板驱动表单之间的主要区别。在模板驱动的表单中,大部分逻辑在模板/视图中,而在响应式表单中,大部分逻辑在视图控制器中。

【讨论】:

  • 我试过 ngAfterViewInit - 它现在给出“this.createForm.controls.nmcNumbber is undefined”
  • @AnandSrivastava 在模板驱动中,您将变量与表单元素连接起来。您需要 ngModel 来控制控件。
  • 感谢您的回答。但是这一行 - this.HexCodeSettingForm.controls['wireNumber'].setErrors(null);在 Angular 版本 5 中为我工作,就像我在这里做的一样。有什么理由不能在 Angular 11 中工作吗?
  • @AnandSrivastava 我们离开了这个问题的范围。问题是为什么this.createFormngOnInit 中未定义。由this answer回答。如果您还有其他问题,您应该提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2020-11-27
  • 2016-04-21
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2020-12-01
相关资源
最近更新 更多