[AngularJS] AngularJS系列(3) 中级篇之表单验证
目录
基本验证
<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
属性类 | 描述 | |
$valid | ng-valid | Boolean 告诉我们这一项当前基于你设定的规则是否验证通过 |
$invalid | ng-invalid | Boolean 告诉我们这一项当前基于你设定的规则是否验证未通过 |
$pristine | ng-pristine | Boolean 如果表单或者输入框没有使用则为True |
$dirty | ng-dirty | Boolean 如果表单或者输入框有使用到则为True |
访问表单属性
方位表单: <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>
这里只是判断了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
本文地址:http://www.cnblogs.com/neverc/p/5912340.html
[AngularJS] AngularJS系列(3) 中级篇之表单验证的更多相关文章
- angularjs学习第五天笔记(第二篇:表单验证升级篇)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- [jQuery学习系列五 ]5-Jquery学习五-表单验证
前言最近总是有一个感觉,虽然这些东西都自己学习并一个案例一个案例的去验证过了.但是总觉得不写成博客记录下来这些都不是自己的东西(心理作用,哈哈).所以每当学习或者复习相关的知识我都喜欢记录下来,下面开 ...
- 最适合入门的Laravel中级教程(三)表单验证
做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...
- AngularJS 1.2.x 学习笔记(表单校验篇)
https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...
- AngularJs 入门系列-2 表单验证
对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...
- AngularJS系列:表单全解(表单验证,radio必选,三级联动,check绑定,form提交验证)
一.查看$scope -->寻找Form控制变量的位置 Form控制变量 格式:form的name属性.input的name属性.$... formName.inputField.$pristi ...
- angularjs学习第四天笔记(第一篇:简单的表单验证)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- AngularJS 的表单验证
最近开始学习angularjs,学到表单验证的时候发现有必要学习下大神的好文章: 转:http://www.oschina.net/translate/angularjs-form-validatio ...
- AngularJS中使用的表单验证
Reference: http://www.tuicool.com/articles/2Qbiqi 客户端表单验证是AngularJS里面最酷的功能之一. AngularJS表单验证可以让你从一开始就 ...
随机推荐
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【Win 10 应用开发】在App所在的进程中执行后台任务
在以往版本中,后台任务都是以独立的专用进程来运行,因此,定义后台任务代码的类型都要位于 Windows 运行时组件项目中. 不过,在14393中,SDK 作了相应的扩展,不仅支持以前的独立进程中运行后 ...
- $.type 怎么精确判断对象类型的 --(源码学习2)
目标: var a = [1,2,3]; console.log(typeof a); //->object console.log($.type(a)); //->ar ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- iOS架构一个中型普通App的一些经验总结
这一版比较完善的的App终于提交审核了.有时间写写自己的一些经验的总结了.自己主导的从0到比较成型的app到目前来说也只有两个,但是其中的很多东西都是大同小异.基本上是想到了什么就写什么,感觉写的不到 ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Android中实现APP文本内容的分享发送与接收方法简述
谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...
- ubuntu进行子域名爆破
好记性不如烂笔头,此处记录一下,ubuntu进行子域名的爆破. 先记录一个在线的子域名爆破网址,无意中发现,很不错的网址,界面很干净,作者也很用心,很感谢. https://phpinfo.me/do ...