Javascript ngForm变量在组件中未定义

Javascript ngForm变量在组件中未定义,javascript,angular,Javascript,Angular,我已经用angular创建了一个表单,并使用模板驱动的方法来控制它。在组中使用了ngForm,并试图通过name访问表单字段,但控制台中出现了一个引用错误-this.form未定义 我的html看起来像- <form #createProjectForm="ngForm" (ngSubmit)="save()"> ..... <mat-form-field appearance="outline">

我已经用angular创建了一个表单,并使用模板驱动的方法来控制它。在组中使用了ngForm,并试图通过name访问表单字段,但控制台中出现了一个引用错误-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>
但是控制台给了我们-


有人能帮我吗?TIA

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

不能使用
控件
禁用模板驱动表单中的元素。线路

this.createForm.controls['nmcNumbber'].disable();
不行。您可以在模板中使用
disable
指令

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


这就是被动表单和模板驱动表单之间的主要区别。在模板驱动的表单中,大多数逻辑位于模板/视图中,而在反应式表单中,大多数逻辑位于视图控制器中。

ngOnInit
为时过早。您需要
ngAfterContentInit
ngAfterViewInit
。视图未在
ngOnInit
中创建,并且
@ViewChild('createProjectForm')createForm
尚未设置

不能使用
控件
禁用模板驱动表单中的元素。线路

this.createForm.controls['nmcNumbber'].disable();
不行。您可以在模板中使用
disable
指令

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


这就是被动表单和模板驱动表单之间的主要区别。在模板驱动的表单中,大多数逻辑位于模板/视图中,而在反应式表单中,大多数逻辑位于视图控制器中。

我尝试了ngAfterViewInit-它现在给出了“this.createForm.controls.nmcNumbber is undefined”@AnandSrivastava在模板驱动的表单中,将变量与表单元素连接起来。您需要
ngModel
作为控件。谢谢您的回答。但是line-this.HexCodeSettingForm.controls['wireNumber'].setErrors(null);在Angular版本5中为我工作,与我在这里的工作方式相同。有什么理由不在Anangular 11工作吗?@AnandSrivastava我们离开了这个问题的范围。问题是为什么
this.createForm
ngOnInit
中没有定义。答案是这样的。如果你还有其他问题,你应该问一个新问题。我尝试了ngAfterViewInit-它现在给出了“this.createForm.controls.nmcNumbber is undefined”@AnandSrivastava在模板驱动下,你将变量与表单元素连接起来。您需要
ngModel
作为控件。谢谢您的回答。但是line-this.HexCodeSettingForm.controls['wireNumber'].setErrors(null);在Angular版本5中为我工作,与我在这里的工作方式相同。有什么理由不在Anangular 11工作吗?@AnandSrivastava我们离开了这个问题的范围。问题是为什么
this.createForm
ngOnInit
中没有定义。答案是这样的。如果你还有其他问题,你应该问一个新问题。我将它改为ngAfterViewInit,但我仍然面临一个错误-我认为这不是创建表单的可靠方法。我认为您应该查看有关如何设置模板驱动表单的官方文档。或者可能代码没有显示所有组件。我将其更改为ngAfterViewInit,但仍然面临一个错误-我认为这不是创建表单的可靠方法。我认为您应该查看有关如何设置模板驱动表单的官方文档。或者可能代码没有显示所有组件。