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 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
Javascript 遮罩层和加载效果代码
Aug 01 Javascript
asp.net+js实现金额格式化
Feb 27 Javascript
jQuery实现美观的多级动画效果菜单代码
Sep 06 Javascript
js中利用cookie实现记住密码功能
Aug 20 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
echarts学习笔记之图表自适应问题详解
Nov 22 Javascript
Node.js 如何利用异步提升任务处理速度
Jan 07 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
JavaScript实现留言板案例
Mar 17 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
Aug 31 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代码
2006/12/06 PHP
让PHP支持页面回退的两种方法
2008/01/10 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
python登陆asp网站页面的实现代码
2015/01/14 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
static关键字的用法
2013/10/07 面试题
医院搬迁方案
2014/06/14 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
无保留意见审计报告
2015/06/05 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
Python基础详解之邮件处理
2021/04/28 Python