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 相关文章推荐
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
Jan 11 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
Jul 03 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
jQuery选择器基础入门教程
May 10 Javascript
JS中使用变量保存arguments对象的方法
Jun 03 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
详解webpack与SPA实践之开发环境搭建
Dec 18 Javascript
在vue中封装可复用的组件方法
Mar 01 Javascript
Javascript三种字符串连接方式及性能比较
May 28 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 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
Zerg基本策略
2020/03/14 星际争霸
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
纯JS实现轮播图
2017/02/22 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python实现快速多线程ping的方法
2015/07/15 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
django的csrf实现过程详解
2019/07/26 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
为什么说python适合写爬虫
2020/06/11 Python
如何清空python的变量
2020/07/05 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
《童趣》教学反思
2014/02/19 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
合作意向协议书范本
2014/03/31 职场文书
家长会演讲稿
2014/04/26 职场文书
品德与社会教学反思
2016/02/24 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技