博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angular 中表单验证的探索
阅读量:5876 次
发布时间:2019-06-19

本文共 2692 字,大约阅读时间需要 8 分钟。

需求

之前有一段时间做一个搜索查询

但是有很多限制条件,如果校验不成功需要给用户提示错误,当然项目用的是组件库的校验

我能否自己写一个?

其实 我是不会的!!!

662347-20161130171034459-1462042323.png

探索

angular 的校验功能很强大

自身校验

There is an error with the field...
  • $pristine (未修改过验证true)
  • $dirty (修改过为true)
  • $valid (通过验证)
  • $invalid (未经过验证)

我们可以创建自定义的ngModel在ngModelController中实现验证。

angular中通过$validators来实现验证

var m1 = angular.module('app', []); m1.controller('customValidator', function () {   require: 'ngModel',   link: function () { scope, element, attrs, ngModel} {        ngModel.$validators.myValidator = function () {                ......           }    }})

自定义校验

在angularJs中使用$validators来实现表单的验证

m1.directive('validatePasswordCharacters', function() {            var REQUIRED_PATTERNS = [                /\d+/,                /[a-z]+/,                /[A-Z]+/,                /\W+/,                /^\S+$/            ];            return {                require : 'ngModel',                link : function($scope, element, attrs, ngModel) {                    ngModel.$validators.passwordCharacters = function(value) {                        var status = true;                        angular.forEach(REQUIRED_PATTERNS, function(pattern) {                            status = status && pattern.test(value);                        });                        return status;                    };                }            }        });
You did not enter a password
Your password must contain a numeric, uppercase and lowercase as well as special characters

结果

没有输入之前
662347-20161202144224677-1810246751.png

随意输入

662347-20161202144244709-472401499.png

异步校验

通过异步ajax与后台胡来判断用户的输入

ngModule.directive('usernameAvailableValidator', ['$http', function($http) {    return {        require : 'ngModel',        link : function($scope, element, attrs, ngModel) {            ngModel.$asyncValidators.usernameAvailable = function(username) {                return $http.get('/api/username-exists?u='+ username);            };        }    }    }]);

异步校验器$asyncValidators在触发的时候需要每个验证器返回一个promise对象。当promise完成的时候便是通过,reject的时候把错误注册到$error对象上。

当所有验证器通过,值才写入scope.
异步验证期间$valid和$invalide为undefined, 会有一个特殊标志$pending来表示,异步验证完成被移除。

Checking Username...

使用ngMessage来显示错误

22.
333...
444...

当然 如果ng-message 无法满足错误提示的需求 也可以用ng-message-include

以上!!!

最后我的愿望
662347-20161202161323412-956377920.png

转载于:https://www.cnblogs.com/mayufo/p/6120877.html

你可能感兴趣的文章
JDBC返回ResultSet结果通过java反射得到java对象
查看>>
PHP5.2 以上版本及其 IIS 与 Apache2.2 的共存问题
查看>>
Python 文本处理
查看>>
VoIP资料
查看>>
PHP常用扩展及服务记录
查看>>
VMware上安装linux
查看>>
spring-boot-devtools在Idea中热部署方法
查看>>
对服务器“防护过度”导致恢复服务过程中引发一系列问题
查看>>
常见字符串函数
查看>>
逻辑三层ORM通用类库 ThreeLayerLib.dll v1.0
查看>>
linux 处理文件名中带空格的方法
查看>>
51CTO稿酬标准2016版正式发布!
查看>>
数据库存储表情(设置utf8mb4编码)
查看>>
Java——容器(Auto-boxing/unboxing)
查看>>
反向输出链表
查看>>
poll---socket客户/服务器端编程
查看>>
调整数组中奇数偶数位置
查看>>
数据库SQL优化大总结之 百万级数据库优化方案
查看>>
Lua For Windows 环境配置及使sciTE支持中文
查看>>
找回密码测试注意
查看>>