开发表单时,客户端数据完整性校验是必不可少的,在jquery 时代出现了无数的数据验证插件也很好用,开发Angular 应用时,angular 内置了一些经常使用的数据验证指令。今天要讲的不是这些指令如何使用,今天讲什么呢,今天讲一些关于验证样式的问题,相关的基础知识在angular.cn 官方文档中都有介绍,在此就很少说了。但还有一些小的易用性方面的没有在文档中指出。jquery
好比:设置了必填后 (就是在input 中增长 required 属性),表单加载完毕后,尚未作任何操做时(无任何的键盘及鼠标操做),input 控件自动的改变了样式,好比红色边框,而我想着是在input 失去焦点后在添加红色的边框,这种状况咋搞呢,通过细致的参考官方文档,咱们能够设置样式来达到这个效果,如:浏览器
.form-control.ng-invalid.ng-touched { border-color: red; }
ng-invalid
: 数据验证不经过时添加的样式名
ng-touched
:失去焦点后添加的样式名ui
添加以上样式后,只有当input 失去焦点而且数据验证不经过时边框的颜色 才会为红色。this
若是表单加载完成后,咱们直接点击提交按钮会怎样呢,假设咱们的提交代码以下google
public btnSubmit() { if ( this.frm.valid ) { ...... } }
此时表单的验证状态确定是false , 数据验证失败,而控件上又没有提示,怎么办? 经过查看浏览器源代码发现input 中没有ng-touched 样式,如何添加上这个呢?各类百度 google 后得出,须要循环from 中的全部control,并调用每一个control的markAsTouched 方法 代码大至以下:插件
public btnSubmit() { Object.values( this.frm.controls).forEach( (c:FormControl) => c.markAsTouched()); // 添加这一句后,验证失败的input 会添加 ng-touched 样式,控件的边框就会变红了 if ( this.frm.valid ) { ...... } }
没啥高深的内容,废话有点多,就这样吧code