惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
小众软件
小众软件
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
MyScale Blog
MyScale Blog

博客园 - 疯狂秀才

疯狂秀才权限管理系统,开源了 - 疯狂秀才 - 博客园 edge 浏览器中数字显示为链接 JSON.net 在实体类中自定义日期的格式 让easyui 的alert 消息框中的确定按钮支持空格键 修复百度编辑器(UM)禁用时上传图片按钮还可点击的BUG; EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题 【转】Chrome 控制台不完全指南 AngularJS 之 Factory vs Service vs Provider【转】 【转】NuGet.org 无法访问的解决方法 jquery easyui 1.4.1 验证时tooltip 的位置调整 jquery easyui 1.4.1 API( CHM版) 扩展 easyui-tabs 插件 关闭标签页方法 easyui layout 折叠后显示标题 easyui 中Datagrid 控件在列较多且无数据时,列显示不全的解决方案 为easyui datagrid 添加上下方向键移动 jQuery EasyUI 1.3.4 API CHM版下载 扩展 easyui 控件系列:为datagrid 增加过滤行 丰富Easyui 的插件 - lookup 分享: 自用 webstorm 6 仿 sublimeText2 的代码风格
Angular 开发小妙招1:提交表单数据验证不通过,更改输入组件...
疯狂秀才 · 2018-10-12 · via 博客园 - 疯狂秀才

开发表单时,客户端数据完整性校验是必不可少的,在jquery 时代出现了无数的数据验证插件也很好用,开发Angular 应用时,angular 内置了一些常用的数据验证指令。今天要讲的不是这些指令如何使用,今天讲什么呢,今天讲一些关于验证样式的问题,相关的基础知识在angular.cn 官方文档中都有介绍,在此就不多说了。但还有一些小的易用性方面的没有在文档中指出。

比如:设置了必填后 (就是在input 中增加 required 属性),表单加载完毕后,还没有做任何操作时(无任何的键盘及鼠标操作),input 控件自动的改变了样式,比如红色边框,而我想着是在input 失去焦点后在添加红色的边框,这种情况咋搞呢,经过细致的参考官方文档,我们可以设置样式来达到这个效果,如:

.form-control.ng-invalid.ng-touched { border-color: red; }

ng-invalid: 数据验证不通过时添加的样式名
ng-touched:失去焦点后添加的样式名

添加以上样式后,只有当input 失去焦点并且数据验证不通过时边框的颜色 才会为红色。

如果表单加载完成后,我们直接点击提交按钮会怎样呢,假设我们的提交代码如下

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 ) {
        ......
    } 
}


没啥高深的内容,废话有点多,就这样吧