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 相关文章推荐
JS.findElementById()使用介绍
Sep 21 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
jquery validate 自定义验证方法介绍 日期验证
Feb 27 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
通过javascript进行UTF-8编码的实现方法
Jun 27 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
Three.js实现简单3D房间布局
Dec 30 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
Sep 06 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
vue组件入门知识全梳理
Sep 21 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
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
php实现简单文件下载的方法
2015/01/30 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
React组件refs的使用详解
2018/02/09 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python中强大的format函数实例详解
2018/12/05 Python
python制作图片缩略图
2019/04/30 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
logging level级别介绍
2020/02/21 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
《和我们一样享受春天》教学反思
2014/02/07 职场文书
优秀护士获奖感言
2014/02/20 职场文书
请假条格式范文
2014/04/10 职场文书
师范毕业生求职信
2014/07/11 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
react中props 的使用及进行限制的方法
2021/04/28 Javascript