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 指令梳理 —— 前端校验的更多相关文章

  1. angular 指令梳理 —— checkBox

    checkBox 持久化数据为 逗号分割 /** * 功能说明: * htCheckbox 指令用于收集checkbox数据. * 在页面中使用 * 属性指令:ht-checkbox * 对应的值为s ...

  2. Angular4 后台管理系统搭建(9) - 用自定义angular指令,实现在服务端验证

    最近这段时间发现,北京这用angular4 或 angular2的公司很少.几乎是没有.很担心自己是不是把精力放到了不应该的地方.白耽误了时间.但是随着我对新版angular框架理解的加深.个人感觉a ...

  3. angular指令深度学习篇

    angular指令深度学习-过滤器 limitTo ... <body ng-app="app" > <div ng-controller="myCtr ...

  4. Angular指令渗透式理解

    通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...

  5. angular指令之complie和link不得不说的故事

    angular指令比较晦涩难懂的就是complie和link字段了,什么时候该用complie?什么时候该用link?总是很难分别清楚.当理解了指令的真正编译原理的时候,就会发现这相当的简单. ng怎 ...

  6. 使用 Angular 打造微前端架构的 ToB 企业级应用

    这篇文章其实已经准备了11个月了,因为虽然我们年初就开始使用 Angular 的微前端架构,但是产品一直没有正式发布,无法通过生产环境实践验证可行性,11月16日我们的产品正式灰度发布,所以是时候分享 ...

  7. angular 指令 要点解析

    指令可以删繁就简前端的js代码,杜绝重复的js代码和html代码. 下面就对指令的重要属性进行罗列 一.restrict  =  'AECM'  分别指该指令标识位于 attribute属性: < ...

  8. Angular指令1

    Angular的指令 也就是directive,其实就是一WebComponent,以前端的眼光来看,好象很复杂,但是以后端的眼光来看,还是非常简单的.其实就是一个中等水平的类. var myModu ...

  9. angular指令大全

    这篇文章的案例都是来自官方,引用的cdn来自bootcss, 因为angular的官方网站被屏了, 所以要翻, 不过我把整个文档下回来了,方便大家下载可以点击: 打开下载英文版 angular的指令 ...

随机推荐

  1. osg复制多个相同物体修改材质属性问题

    转自http://www.cnblogs.com/ylwn817/articles/2153982.html 当通过osg复制多个相同物体时候,修改复制过来的某个物体材质属性时候,假设我们物体透明度, ...

  2. R0:前瞻

    原文链接http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html Libevent使用手册:前瞻 总览: Libevent是一个用来写高性能 ...

  3. PHP中取出字符串中的空格 逗号

    preg_replace("/\s| |,|,/","",$_str) PHP中取出字符串中的空格 逗号 (包括中文状态下)

  4. IE6 png 透明 (三种解决方法)(转来的哦)

    FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 ====================================================== ...

  5. 内核参数优化之1 keepalive解析

    以下信息纯属虚构,切勿相信! tcp/ip协议中有一个keep-alive机制,即检查空连接的时效性,当一个空连接持续一段时间后,就会发送一个keep-alive探测包,来探测客户端是否还存在. 如果 ...

  6. Expression构建DataTable to Entity 映射委托

    namespace Echofool.Utility.Common { using System; using System.Collections.Generic; using System.Dat ...

  7. ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示

    1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...

  8. android技术下载

    http://www.linuxidc.com/Linux/2011-08/41339.htm http://linux.linuxidc.com/2011%E5%B9%B4%E8%B5%84%E6% ...

  9. MySQL 学习笔记 (范式)

    范式基本就是不要有重复的数据,表和表之间都是用主键和外键来联系 表的关系通常分3中 1 对 1 1 对 多 多 对 多 多 对 多 是用另一个表来实现的,这个表记入了a 表和 b表之间多对多的联系主键

  10. STARTUP.A51详解及如何使能可重入函数

    $NOMOD51       ;Ax51宏汇编器控制命令:禁止预定义的8051;------------------------------------------------------------ ...