Angular 开发小妙招1:提交表单数据验证不经过,更改输入组件的样式

开发表单时,客户端数据完整性校验是必不可少的,在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

相关文章
相关标签/搜索