我的表格是通过以下方式制作的:
<form #form="ngForm" novalidate (ngSubmit)="register(form);">
<div class="registerinput">
<label for="firstname">First Name</label>
<input #firstname="ngModel" type="text" name="firstname" maxlength="30" pattern="[a-zA-Z ]*" required ngModel>
<div [hidden]="!form.controls.firstname.touched && !form.controls.firstname.errors?.required" class="alert-danger">
Please enter your name
</div>
<div [hidden]="!form.controls.firstname.touched && !form.controls.firstname.errors?.maxlength" class="alert-danger">
Max length is 30 characters
</div>
<div [hidden]="!form.controls.firstname.touched && !form.controls.firstname.errors?.pattern" class="alert-danger">
Only letters are allowed
</div>
</div>
<div class="registerinput">
<button type="submit" class="btn-register">Register</button>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
EXCEPTION: Uncaught (in promise): Error: Error in http://localhost:3000/app/register/register.component.html:7:17 caused by: Cannot read property 'touched' of undefined
Error: Error in http://localhost:3000/app/register/register.component.html:7:17 caused by: Cannot read property 'touched' of undefined
Run Code Online (Sandbox Code Playgroud)
它似乎找不到我的控件。但是,当我尝试打印 form.controls 时,得到以下结果:
所以在这种情况下,它发现它们很好。这里有什么问题?我过去做过类似的东西,效果很好。
更新:我发现,而不是例如form.controls.firstname.touched
,我必须仅使用firstname.touched
. 我只是不明白为什么,因为我在同一个项目中有另一个文件,我正在使用以完全相同的方式制作的表单,但在那个文件中我使用form.controls.*
. 我想firstname.touched
如果您声明了模板引用变量就可以使用,但我不知道在什么情况下可以使用form.controls.*
.
另一种进行验证的方法是:
<form #form="ngForm" novalidate (ngSubmit)="register(form);">
<div class="registerinput">
<label for="firstname">First Name</label>
<input #firstname="ngModel" type="text" name="firstname" maxlength="30" pattern="[a-zA-Z ]*" required ngModel>
<div [hidden]="!firstname.touched && !firstname.errors?.required" class="alert-danger">
Please enter your name
</div>
<div [hidden]="!firstname.touched && !firstname.errors?.maxlength" class="alert-danger">
Max length is 30 characters
</div>
<div [hidden]="!firstname.touched && !firstname.errors?.pattern" class="alert-danger">
Only letters are allowed
</div>
</div>
<div class="registerinput">
<button type="submit" class="btn-register" [disabled]='!form.valid'>Register</button>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
这是一种非常简单易行的方法。
归档时间: |
|
查看次数: |
4198 次 |
最近记录: |