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 相关文章推荐
Javascript 中的类和闭包
Jan 08 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
谷歌浏览器调试JavaScript小技巧
Dec 29 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
Jan 04 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
对layui中的onevent 和event的使用详解
Sep 06 Javascript
javascript使用canvas实现饼状图效果
Sep 08 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
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP技术开发技巧分享
2010/03/23 PHP
php中explode与split的区别介绍
2012/10/03 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
js 编程笔记 无名函数
2011/06/28 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python使用RNN实现文本分类
2018/05/24 Python
python计算日期之间的放假日期
2018/06/05 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python 写一个文件分发小程序
2020/12/05 Python
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android