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 相关文章推荐
jquery实现ajax提交form表单的方法总结
Mar 03 Javascript
js+html5绘制图片到canvas的方法
Jun 05 Javascript
js判断手机端(Android手机还是iPhone手机)
Jul 22 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
微信小程序封装http访问网络库实例代码
May 24 Javascript
JavaScript运行原理分析
Feb 09 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 Javascript
nuxt.js 缓存实践
Jun 25 Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
May 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脚本过滤用户上传的图片
2015/07/03 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
JavaScript版代码高亮
2006/06/26 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
书单|人生苦短,你还不用python!
2017/12/29 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
北京华建集团SQL面试题
2014/06/03 面试题
千元咖啡店的创业计划书范文
2013/12/29 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
内勤岗位职责
2015/02/10 职场文书
暂停营业通知
2015/04/25 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android