AngularJS表单验证功能


Posted in Javascript onOctober 19, 2017

        能够根据用户在表单中输入的内容给出实时视觉反馈是非常重要的。在人与人沟通的语境中,表单验证给出来的反馈同获得正确输入同等重要。

表单验证不仅能给用户提供有用的反馈,同时也能保护我们的Web应用不会被恶意或者错误的输入所破坏。我们要在Web前端尽力保护后端。

AngularJS能够将HTML5表单验证功能同它自己的验证指令结合起来使用,并且非常方便。AngularJS提供了很多表单验证指令。

<form name="form" novalidate>
  <label name="email">Your email</label>
  <input type="email" name="email" ng-model="email" placeholder="Email Address"/>
</form>

要使用表单验证,首先要确保表单像上面的例子一样有一个 name 属性。

所有输入字段都可以进行基本的验证,比如最大、最小长度等。这些功能是由新的HTML5表单属性提供的。

如果想要屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加 novalidate 标记

1. 必填项 required

验证某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记 required 即可:

注释:required 属性适用于以下 <input> 类型:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file

<input type="text" required />

2. 最小长度 ng-minleng="{number}"

验证表单输入的文本长度是否大于某个最小值,在输入字段上使用AngularJS指令 ng-minleng="{number}"

<input type="text" ng-minlength="5" /> 

3. 最大长度 ng-maxlength="{number}"

验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用AngularJS指令 ng-maxlength="{number}"

<input type="text" ng-maxlength="20" />

4. 模式匹配  ng-pattern="/PATTERN/"

        使用 ng-pattern="/PATTERN/" 来确保输入能够匹配指定的正则表达式:

<input type="text" ng-pattern="[a-zA-Z]" />

5. 电子邮件

验证输入内容是否是电子邮件,只要像下面这样将 input 的类型设置为 email 即可:

<input type="email" name="email" ng-model="user.email" />

6. 数字

验证输入内容是否是数字,将 input 的类型设置为 number :

<input type="number" name="age" ng-model="user.age" />
 

7. URL

验证输入内容是否是URL,将 input 的类型设置为 url :

<input type="url" name="homepage" ng-model="user.facebook_url" />

在表单中控制变量

表单的属性可以在其所属的 $scope 对象中访问到,而我们又可以访问 $scope 对象,因此JavaScript可以间接地访问DOM中的表单属性。借助这些属性,我们可以对表单做出实时(和AngularJS中其他东西一样)响应。这些属性包括下面这些。(注意,可以使用下面的格式访问这些属性。)

formName.inputFieldName.property 

■未修改的表单

这是一个布尔属性,用来判断用户是否修改了表单。如果未修改,值为 true ,如果修改过值为 false

formName.inputFieldName.$pristine 

■修改过的表单

只要用户修改过表单,无论输入是否通过验证,该值都返回 true

formName.inputFieldName.$dirty 

 ■合法的表单

这个布尔型的属性用来判断表单的内容是否合法。如果当前表单内容是合法的,下面属性的值就是 true :

formName.inputFieldName.$valid 

■ 不合法的表单

这个布尔属性用来判断表单的内容是否不合法。如果当前表单内容是不合法的,下面属性的值为 true :

formName.inputFieldName.$invalid

■ 错误

这是AngularJS提供的另外一个非常有用的属性: $error 对象。它包含当前表单的所有验证内容,以及它们是否合法的信息。用下面的语法访问这个属性:

formName.inputfieldName.$error  

$parsers

当用户同控制器进行交互,并且 ngModelController 中的 $setViewValue() 方法被调用时,$parsers 数组中的函数会以流水线的形式被逐个调用。第一个 $parse 被调用后,执行结果会传递给第二个 $parse ,以此类推

这些函数可以对输入值进行转换,或者通过 $setValidity() 函数设置表单的合法性。

使用 $parsers 数组是实现自定义验证的途径之一。

例如,假设我们想要确保输入值在某两个数值之间,可以在 $parsers 数组中入栈一个新的函数,这个函数会在验证链中被调用。

每个 $parser 返回的值都会被传入下一个 $parser 中。当不希望数据模型发生更新时返回undefined 。 

 html

<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>表单测试</title>
  <link rel="stylesheet" href="">
  <script type="text/javascript" src="angular.1.2.13.js"></script>
</head>
<body>
  <div ng-controller="TestController">
    <form name="testForm">
      <input type="number" name="inputs" ng-test ng-model="obj.number">
      <span ng-show="testForm.inputs.$error.test">good</span>
      <span ng-hide="testForm.inputs.$error.test">bad</span>
      <div>{{ testForm.inputs.$valid }}</div>
      <div>{{ testForm.inputs.$invalid }}</div>
      <div>{{ obj.number }}</div>
    </form>
  </div>
  <script type="text/javascript" src="test5app.js"></script>
</body>
</html>

javascript  ( test5app.js )

angular.module('myApp', []).controller('TestController', function($scope) {
  $scope.obj = {
    number: 34
  }
}).directive('ngTest', function() {
  return {
    require: '?ngModel',
    restrict: 'AE',
    link: function($scope, iElm, iAttrs, ngModel) {
      if (!ngModel) return;
      ngModel.$parsers.push(function(viewValue) {
        var num = parseInt(viewValue);
        if (num >= 0 && num < 99) {
          ngModel.$setValidity('test', true);
          return viewValue
        } else {
          ngModel.$setValidity('test', false);
          return undefined
        }
      })
    }
  }
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ext 表单布局实例代码
Apr 30 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
Bootstrap被封装的弹层
Jul 20 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
Mar 01 Javascript
JavaScript数组_动力节点Java学院整理
Jun 26 Javascript
Vue父子模版传值及组件传值的三种方法
Nov 27 Javascript
vue-router路由模式详解(小结)
Aug 26 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
node实现mock-plugin中间件的方法
Dec 25 Javascript
JS数组方法shift()、unshift()用法实例分析
Jan 18 Javascript
JavaScript实现点击切换功能
Jan 27 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 #Javascript
Vue如何从1.0迁移到2.0
Oct 19 #Javascript
bootstrap Table服务端处理分页(后台是.net)
Oct 19 #Javascript
安装vue-cli报错 -4058 的解决方法
Oct 19 #Javascript
BootStrap模态框不垂直居中的解决方法
Oct 19 #Javascript
微信小程序组件之srcoll-view的详解
Oct 19 #Javascript
JS实现点击循环切换显示内容的方法
Oct 19 #Javascript
You might like
一个目录遍历函数
2006/10/09 PHP
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
又一个php 分页类实现代码
2009/12/03 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
js压缩利器
2007/02/20 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python Django框架实现自定义表单提交
2016/03/25 Python
基于python时间处理方法(详解)
2017/08/14 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
Python hmac模块使用实例解析
2019/12/24 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
新三好学生主要事迹
2014/01/23 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis