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 相关文章推荐
A标签中通过href和onclick传递的this对象实现思路
Apr 19 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
Jun 14 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
Vue.js 中的 $watch使用方法
May 25 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
小程序实现左滑删除效果
Jul 25 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下使用以下代码连接并测试
2008/04/09 PHP
PHP Reflection API详解
2015/05/12 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
protractor的安装与基本使用教程
2017/07/07 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
vue实现拖拽效果
2019/12/23 Javascript
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python抽取指定url页面的title方法
2018/05/11 Python
python绘制随机网络图形示例
2019/11/21 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
法学专业应届生求职信
2013/10/16 职场文书
师德学习感言
2014/01/31 职场文书
考试违纪检讨书
2014/02/02 职场文书
学历公证书范本
2014/04/09 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
求职信格式范文
2015/03/19 职场文书
公司开除员工通知
2015/04/22 职场文书
摩登时代观后感
2015/06/03 职场文书
鸡毛信观后感
2015/06/11 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书