AngularJS表单验证中级篇(3)


Posted in Javascript onSeptember 28, 2016

目录

基本验证
验证插件messages
自定义验证 

基本验证

<form name="form" novalidate ng-app>
  <span>{{form.$invalid}}</span>
  <span>{{form.$valid}}</span>
  <span>{{form.$dirty}}</span>
  <span>{{form.$pristine}}</span>
  <input type="text" ng-model="user" required />
  <input type="text" ng-model="pwd" required minlength="4" ng-maxlength="5" />
  <input type="text" ng-model="phone" required ng-pattern="/1[3|5|7|8|][0-9]{9}/" />
  <input type="email" ng-model="email" required />
  <input type="url" ng-model="url" required />
  <input type="number" ng-model="number" required />
  <div>
    <button type="reset" ng-disabled="form.$pristine">重置</button>
    <button type="submit" ng-disabled="form.$invalid">提交</button>
  </div>
</form>

以上展示了基本的ng验证.

这里重点介绍一下上面的特例:

novalidate:禁用H5自带的验证

ng-maxlength: 如果不写ng,maxlength则直接限制最多输入字符,稍微有点区别(IE9 + Chrome 测试)

ng-pattern:通过正则验证,如果不写ng开头,无验证效果.

注:要启用验证 同时需要绑定一个ng-model 

AngularJS表单验证中级篇(3)

访问表单属性

---方位表单: <form name>.<angular property>

---访问一个输入框: <form name>.<input name>.<angular property> 

验证插件

在介绍messages插件之前,我们看下本来的验证提示

<form name="form" ng-app novalidate>
  <span>{{form.user.$error.required?'user该项必填':''}}</span>
  <input type="text" ng-model="user" name="user" required />
  <span>{{form.pwd.$error.required?'pwd该项必填':''}}</span>
  <input type="text" ng-model="pwd" name="pwd" required />
  <span>{{form.info.$error.required?'info该项必填':''}}</span>
  <input type="text" ng-model="info" name="info" required />
  <span>{{form.age.$error.required?'age该项必填':''}}</span>
  <input type="text" ng-model="age" name="age" required />
  <div>
    <button type="submit" ng-disabled="form.$invalid">提交</button>
  </div>
</form>

AngularJS表单验证中级篇(3)

这里只是判断了require 当我们的代码 我们重复写了很多3元表达式 

messages插件就是更友好的解决重复的问题

<form name="form" ng-app="myApp" novalidate>
  <input type="email" ng-model="user" name="username" required minlength="4" />
  <div ng-messages="form.username.$error" ng-messages-multiple>
    <div ng-message="required">该项必填</div>
    <div ng-message="minlength">低于最低长度</div>
    <div ng-message="email">应为email</div>
  </div>
</form>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-messages.min.js"></script>
<script>
  angular.module('myApp', ['ngMessages']);
</script>

Nuget:Install-Package AngularJS.Messages

自定义验证

通过基本的验证方式,我们已经能够解决大部分的验证问题.但项目中永远充满着各种各样的需求.

在ng中的自定义验证,一般通过指令的形式创建.

<form name="form" ng-app="myApp" novalidate>
  <input type="email" ng-model="user" name="username" required ensure-unique minlength="4" />
  <div ng-messages="form.username.$error" ng-messages-multiple>
    <div ng-message="required">该项必填</div>
    <div ng-message="minlength">低于最低长度</div>
    <div ng-message="email">应为email</div>
    <div ng-message="unique">用户名已存在</div>
  </div>
</form>

在上面的messages插件Demo中,新建一行验证用户名已存在 以及 在input上添加了ensure-unique指令

同时,我们需要在js中定义ensure-unique指令:

angular.module('myApp', ['ngMessages']).directive('ensureUnique', ['$http', '$timeout', '$window', function ($http, $timeout, $window) {
      return {
        restrict: "A",
        require: 'ngModel',
        link: function (scope, ele, attrs, ngModelController) {
          scope.$watch(attrs.ngModel, function (n) {
            if (!n) return;
            $timeout.cancel($window.timer);
            $window.timer = $timeout(function () {
              $http({
                method: 'get',
                url: '/api/checkusername/', //根据换成自己的url
                params: {
                  "username": n
                }
              }).success(function (data) {
                ngModelController.$setValidity('unique', data.isUnique); //这个取决于你返回的,其实就是返回一个是否正确的字段,具体的这块可以自己修改根据自己的项目
              }).error(function (data) {
                ngModelController.$setValidity('unique', false);
              });
            }, 500);
          });
        }
      };
    }]);

指令不是本节重点内容,这里简单说下

ngModelController.$setValidity('unique', bool);

通过该API可以设置$error.unique.

setValidity为true,则$error.unique为false

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

Javascript 相关文章推荐
javascript 添加和移除函数的通用方法
Oct 20 Javascript
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
关于Mozilla浏览器不支持innerText的解决办法
Jan 01 Javascript
js对象继承之原型链继承实例
Jan 10 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
jquery插件实现悬浮的菜单
Apr 24 jQuery
js 实现Material UI点击涟漪效果示例
Sep 23 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 #Javascript
jQuery解析XML 详解及方法总结
Sep 28 #Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
Sep 28 #Javascript
微信小程序 实例应用(记账)详解
Sep 28 #Javascript
JavaScript 闭包详细介绍
Sep 28 #Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 #Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 #Javascript
You might like
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
php源码的使用方法讲解
2019/09/26 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
Python探索之SocketServer详解
2017/10/28 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
python性能测试工具locust的使用
2020/12/28 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
两道JAVA笔试题
2016/09/14 面试题
给面试官的感谢信
2014/02/01 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
学习保证书100字
2015/02/26 职场文书
面试通知短信
2015/04/20 职场文书
培根随笔读书笔记
2015/07/01 职场文书
2019银行竞聘书
2019/06/21 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android