angular 指令梳理 —— 前端校验
angular js内置校验的扩展
校验成功则 scope.formName.$valid=true
校验失败 元素的class: ng-invalid
成功:.ng-valid
/**
* 校验指令. <input ng-model="data.user" ng-validate="{require:true,number:true}" >
*/
.directive('htValidate', [function () {
return {
require: "ngModel",
link: function (scope, element, attr, ctrl) {
var validate = attr.htValidate;
var permission=getPermission(attr.permission,scope);//权限。
//如果没有必填权限且没有其他校验返回
if(permission!=="b" && validate=="{}")return;
var validateJson = eval('(' + validate + ')');if(permission=="b")validateJson.required = true;//如果必填权限。默认必填 var customValidator = function (value) {
if(!validate) return true;
handlTargetValue(validateJson);//特殊处理可忽略
var validity = $.fn.validRules(value,validateJson,element);//调用系统校验,做出错提示返回true/false
ctrl.$setValidity("customValidate", validity);
return validity ? value : undefined;
};
//modelValue To ViewValue 的时候不通过校验 则不展示
ctrl.$formatters.push(customValidator);
ctrl.$parsers.push(customValidator);
//特殊的一些处理 可忽略
//获取比较目标字段的值。 所有比较的都包含target对象eg:{eq:{target:data.mian.name}}
var handlTargetValue = function(validateJson){
for(key in validateJson){
if(validateJson[key].target){
validateJson[key].targetVal =eval("scope."+dateRange.target);
}
}
} }
};
}])
精简版:
.directive('htValidate',function () {
return {
require: "ngModel",
link: function (scope, element, attr, ctrl) {
var validate = attr.htValidate;
if(!validate)return;
var validateJson = eval('(' + validate + ')'); var customValidator = function (value) {
22 var validity = $.fn.validRules(value,validateJson,element); //return true/false
ctrl.$setValidity("customValidate", validity);
return validity ? value : undefined;
}; ctrl.$formatters.push(customValidator);
ctrl.$parsers.push(customValidator);
}
};
})
出错可以通过qtip等进行提示。边框也可以根据错误样式做出一些改变eg:
input.ng-valid,textarea.ng-valid ,select.ng-valid ,.edui-editor.ng-valid,.ng-invalid .ht-input {
border-color: #5eb95e !important;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.ng-dirty input{
background-color: white;
} input.ng-invalid,textarea.ng-invalid, select.ng-invalid, .edui-editor.ng-invalid ,span.ng-invalid input,.ng-invalid .ht-input
{
border-color: #dd514c !important;;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
div.ng-invalid label, span.ng-invalid a{
color:red;
} table.ng-invalid {
border-color: #dd514c !important;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
ng-valid ng-invalid CSS
$.fn.validRules(value,validateJson,element); 这部分代码。只有一半是本人写的。就不拿出来了。就是校验+qtip 提示。
angular 指令梳理 —— 前端校验的更多相关文章
- angular 指令梳理 —— checkBox
checkBox 持久化数据为 逗号分割 /** * 功能说明: * htCheckbox 指令用于收集checkbox数据. * 在页面中使用 * 属性指令:ht-checkbox * 对应的值为s ...
- Angular4 后台管理系统搭建(9) - 用自定义angular指令,实现在服务端验证
最近这段时间发现,北京这用angular4 或 angular2的公司很少.几乎是没有.很担心自己是不是把精力放到了不应该的地方.白耽误了时间.但是随着我对新版angular框架理解的加深.个人感觉a ...
- angular指令深度学习篇
angular指令深度学习-过滤器 limitTo ... <body ng-app="app" > <div ng-controller="myCtr ...
- Angular指令渗透式理解
通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...
- angular指令之complie和link不得不说的故事
angular指令比较晦涩难懂的就是complie和link字段了,什么时候该用complie?什么时候该用link?总是很难分别清楚.当理解了指令的真正编译原理的时候,就会发现这相当的简单. ng怎 ...
- 使用 Angular 打造微前端架构的 ToB 企业级应用
这篇文章其实已经准备了11个月了,因为虽然我们年初就开始使用 Angular 的微前端架构,但是产品一直没有正式发布,无法通过生产环境实践验证可行性,11月16日我们的产品正式灰度发布,所以是时候分享 ...
- angular 指令 要点解析
指令可以删繁就简前端的js代码,杜绝重复的js代码和html代码. 下面就对指令的重要属性进行罗列 一.restrict = 'AECM' 分别指该指令标识位于 attribute属性: < ...
- Angular指令1
Angular的指令 也就是directive,其实就是一WebComponent,以前端的眼光来看,好象很复杂,但是以后端的眼光来看,还是非常简单的.其实就是一个中等水平的类. var myModu ...
- angular指令大全
这篇文章的案例都是来自官方,引用的cdn来自bootcss, 因为angular的官方网站被屏了, 所以要翻, 不过我把整个文档下回来了,方便大家下载可以点击: 打开下载英文版 angular的指令 ...
随机推荐
- osg复制多个相同物体修改材质属性问题
转自http://www.cnblogs.com/ylwn817/articles/2153982.html 当通过osg复制多个相同物体时候,修改复制过来的某个物体材质属性时候,假设我们物体透明度, ...
- R0:前瞻
原文链接http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html Libevent使用手册:前瞻 总览: Libevent是一个用来写高性能 ...
- PHP中取出字符串中的空格 逗号
preg_replace("/\s| |,|,/","",$_str) PHP中取出字符串中的空格 逗号 (包括中文状态下)
- IE6 png 透明 (三种解决方法)(转来的哦)
FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 ====================================================== ...
- 内核参数优化之1 keepalive解析
以下信息纯属虚构,切勿相信! tcp/ip协议中有一个keep-alive机制,即检查空连接的时效性,当一个空连接持续一段时间后,就会发送一个keep-alive探测包,来探测客户端是否还存在. 如果 ...
- Expression构建DataTable to Entity 映射委托
namespace Echofool.Utility.Common { using System; using System.Collections.Generic; using System.Dat ...
- ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示
1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...
- android技术下载
http://www.linuxidc.com/Linux/2011-08/41339.htm http://linux.linuxidc.com/2011%E5%B9%B4%E8%B5%84%E6% ...
- MySQL 学习笔记 (范式)
范式基本就是不要有重复的数据,表和表之间都是用主键和外键来联系 表的关系通常分3中 1 对 1 1 对 多 多 对 多 多 对 多 是用另一个表来实现的,这个表记入了a 表和 b表之间多对多的联系主键
- STARTUP.A51详解及如何使能可重入函数
$NOMOD51 ;Ax51宏汇编器控制命令:禁止预定义的8051;------------------------------------------------------------ ...