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 流畅动画实现原理
Sep 08 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
Mar 25 Javascript
window.location.href的用法(动态输出跳转)
Aug 09 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
Angularjs2不同组件间的通信实例代码
May 06 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
Jun 13 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 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
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
Vue中props的详解
2019/05/16 Javascript
Python实现统计文本文件字数的方法
2017/05/05 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
通过实例了解python property属性
2019/11/01 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
追悼会子女答谢词
2014/01/28 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL