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 相关文章推荐
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
May 17 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
如何从头实现一个node.js的koa框架
Jun 17 Javascript
微信小程序实现收货地址左滑删除
Nov 18 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
es6函数之尾调用优化实例分析
Apr 25 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
Apr 30 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 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
一个PHP日历程序
2006/12/06 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
Fabric 应用案例
2016/08/28 Python
python读写json文件的简单实现
2017/04/11 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
应届毕业生个人求职信范文
2014/01/29 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
学生保证书
2015/01/16 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
Pygame Event事件模块的详细示例
2021/11/17 Python
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL