angular 基于ng-messages的表单验证实例


Posted in Javascript onMay 04, 2017

最近在学习angular,那么今天也算个学习笔记吧!

html

<div class="form-group" ng-class="{'has-error': myForm.myName.$touched && myForm.myName.$invalid}">
  <label class="col-xs-2 control-label">name</label>
  <div class="col-xs-6">
    <input type="text" class="form-control" name="myName" ng-model="formData.username"
        placeholder="2-10个中英文字符,aaa会重名,必填"
        name-check minlength="2" maxlength="10" required>
  </div>
  <div class="col-xs-4 form-control-static text-danger" ng-messages="myForm.myName.$error"
           ng-messages-include="demos/form/error.html" ng-show="myForm.myName.$touched">
  </div>
</div>

ng-messages="myForm.myName.$error" 给出错误类型(required, char, exist, minlength)

error.html

<span ng-message="required">必填</span>
<span ng-message="char">非法字符</span>
<span ng-message="exist">名称已存在</span>
<span ng-message="minlength">太短了</span>

directive name-check 利用ngModel 的$validators,& $asyncValidators 添加自定义验证

app.directive('nameCheck', nameCheck);

nameCheck.$inject = ['HttpService', '$q'];

function nameCheck(HttpService, $q){

  var NAME_REG = /^[a-zA-Z\u4e00-\u9fa5]+$/;

  return {
    restrict: 'A',
    require: 'ngModel',
    link:function($scope,element,attrs,ctrl){

      ctrl.$validators.char = function(modelValue, viewValue) {
        var value = modelValue || viewValue;
        if(!NAME_REG.test(value)){
          return false;
        }
        return true;
      };
      ctrl.$asyncValidators.exist = function(modelValue, viewValue){
        var value = modelValue || viewValue;
        var deferred = $q.defer();
        HttpService.get('api/users/' + value).then(function(res) {
          if(res.isExist){
            deferred.reject(false);

          }
          deferred.resolve(true);
        })

        return deferred.promise;
      }
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
共享自己写一个框架DreamScript
Jan 20 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
纯css+js写的一个简单的tab标签页带样式
Jan 28 Javascript
js通过八个点 拖动改变div大小的实现方法
Mar 05 Javascript
Express.JS使用详解
Jul 17 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
Oct 17 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
ReactNative之FlatList的具体使用方法
Nov 29 Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 Javascript
关于ES6尾调用优化的使用
Sep 11 Javascript
JS实现标签页切换效果
May 04 #Javascript
ES6下React组件的写法示例代码
May 04 #Javascript
JS触摸事件、手势事件详解
May 04 #Javascript
详解Angular 4.x Injector
May 04 #Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 #Javascript
详解Node.js串行化流程控制
May 04 #Javascript
纯原生js实现贪吃蛇游戏
Apr 16 #Javascript
You might like
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
为什么要有struct关键字
2012/05/08 面试题
职称自我鉴定
2013/10/15 职场文书
厨房工作人员岗位职责
2013/11/15 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
房屋改造计划书
2014/01/10 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
授权委托书范文
2014/07/31 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
2014年话务员工作总结
2014/11/19 职场文书
导游词之无锡梅园
2019/11/28 职场文书