模板驱动的表单(Template(4)

logForm(theForm: NgForm) { if (theForm.invalid) { if (theForm.controls['name'].errors) { this.nameErrorMsg = 'name error:' + JSON.stringify(theForm.controls['name'].errors); } else { this.nameErrorMsg = null; } } console.log(theForm.value); }

在这个方法里,theForm就是ngForm的模板引用实例,类型是NgForm的。

如果表单验证有失败,theForm.invalid就是false。

theForm.controls就是这个表单里的所有控件,如果想获取姓名的验证结果,就是theForm.controls['name'].errors。

用这种方式,我们就可以在组件中获取所有表单控件的数据、验证状态、错误信息等。

重置表单

一般情况下,如果是新建用户信息,我们需要在保存成功以后,清空当前数据,重置表单的状态,等待用户重新输入。如果我们只是清空数据,这时候那些验证错误就会被检测到,我们我们需要将表单控件也都重置成未修改状态。这在Angular2里很简单,它提供了一个reset方法。

我们在里面添加一个重置按钮:

<button (click)="reset(userForm)">重置</button>

然后在组件里:

reset(theForm: NgForm) { theForm.reset(); return false; }

注意我们需要让这个方法返回false,这样他就不会触发submit的方法。

在官方的文档中,还提供了另一种技巧来实现这种重置,就是在form上使用ngIf:

<form #userForm="ngForm" (ngSubmit)="logForm(userForm)" novalidate *ngIf="active">

只有在active为true时这个表单才会创建。

然后在重置的时候,设置这个active为false,这样这个表单就会被销毁,然后用setTimeout的方式再设置它为true,这个表单就会重新创建,这样就实现了重置的效果。

reset() { this.user = { // 重置用户数据 address: {} }; this.active = false; setTimeout(() => this.active = true, 0); return false; }

这也是一种小窍门,可以在某些情况下使用。

总结

至此,有关模板驱动的表单的基本用法大致完成,再总结一下模板驱动的表单的基本特性:

所有的表单控件的定义都在模板里

所有的验证器都在模板里面添加

表单数据的状态、验证结果都在模板上通过判断表单里面控件数据的状态来显示

如果需要测试这部分的代码,需要使用e2e(端到端)测试,也就是在浏览器里面

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wydpyp.html