Javascript ngForm变量在组件中未定义
我已经用angular创建了一个表单,并使用模板驱动的方法来控制它。在组中使用了ngForm,并试图通过name访问表单字段,但控制台中出现了一个引用错误-this.form未定义 我的html看起来像-Javascript ngForm变量在组件中未定义,javascript,angular,Javascript,Angular,我已经用angular创建了一个表单,并使用模板驱动的方法来控制它。在组中使用了ngForm,并试图通过name访问表单字段,但控制台中出现了一个引用错误-this.form未定义 我的html看起来像- <form #createProjectForm="ngForm" (ngSubmit)="save()"> ..... <mat-form-field appearance="outline">
<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,但仍然面临一个错误-我认为这不是创建表单的可靠方法。我认为您应该查看有关如何设置模板驱动表单的官方文档。或者可能代码没有显示所有组件。