AngularJS学习笔记(二) 表单验证案例(ng-repeat/filter)
这一节相对来说需要理解的东西不是太多,记住了那些api就行了。
还是一个案例(同样来自miaov),一个表单验证,先上代码,然后再对对应的内容进行解释。
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<div ng-controller="Aaa">
<form novalidate name="nForm">
<div>
<label>用户名</label>
<input type="text" name="nText" ng-model="regText.name" required ng-pattern="/^[a-zA-Z]+$/" ng-blur="change('regText',nForm.nText.$error)">
<span ng-repeat="re in regText.regList|filter:regText.regVal">{{re.tips}}</span>
</div>
<div>
<label>密码</label>
<input type="text" name="nPassword" ng-model="regPassword.name" required ng-minlength="6" ng-blur="change('regPassword',nForm.nPassword.$error)">
<span ng-repeat="re in regPassword.regList|filter:regPassword.regVal">{{re.tips}}</span>
</div>
</form>
</div>
<body>
<script src="angular.min.js"></script>
<script>
var m1=angular.module("myApp",[]);
m1.controller("Aaa",["$scope", function ($scope) {
$scope.regText = {
regVal : 'default',
regList : [
{ name : 'default' , tips : '请输入用户名'},
{ name : 'required' , tips : '用户名不能为空'},
{ name : 'pattern' , tips : '用户名必须是字母'},
{ name : 'pass' , tips : '√'}
]
};
$scope.regPassword = {
regVal : 'default',
regList : [
{ name : 'default' , tips : '请输入密码'},
{ name : 'required' , tips : '密码不能为空'},
{ name : 'minlength' , tips : '密码至少6位'},
{ name : 'pass' , tips : '√'}
]
}; $scope.change=function(reg,err){
for(var attr in err){
if(err[attr]==true){
$scope[reg].regVal=attr;
return;
}
}
$scope[reg].regVal="pass";
} }]);
</script>
</body>
</html>
1.模块module
模块这东西的好处我还没有体会出来,可能是因为做的东西代码量还太小。它的功能基本上是讲代码按照功能分成若干块,这样就可以有效地防止controller的混乱(在我看来就是再来一级分类管理)。
具体代码就是
html中
<html lang="en" ng-app="myApp">
其中"myApp"就是这个模块的名字
对应的js代码
var m1=angular.module("myApp",[]);
其中,第二个参数是这个模块需要依赖的模块。
当然,controller的写法也要变一变了,至少你得告诉程序你这个controller是写在哪个模块里的吧。
m1.controller("Aaa",["$scope",function($scope){
//code
}]);
其中$scope是注入的服务
2.表单相关
表单验证相关操作其实大部分是在标签内写的
<input type="text" name="nText" ng-model="regText.name" required ng-pattern="/^[a-zA-Z]+$/" ng-blur="change('regText',nForm.nText.$error)">
这几个api是啥意思就不仔细说了,反正意思就是一些字符串验证的规则,想要通过就必须符合这些规则。当然,如果你只想告诉用户通不通过而不想写那么多原因的话大可以一个正则搞定。重点是:通不过会发生什么? 很简单,通不过的话ng-model对应的变量值就是 undefined。另外一个值得注意的问题是何时触发验证,改变验证提示(提示内容还是需要写逻辑的)。有一类是像百度搜索提示那样,输入内容改变一下就触发一次,但是实际上对于表单验证来说这样做并不合适,因为1.其实你只需要在用户觉得输入完了验证,这样做会增加不少不必要的代码运行2.如果你设置了类似于字段长度之类的限制,在输入到一半的时候可能跳出来”长度不够”之类的。要是我遇到这种表单验证,心里肯定会默默骂一句:我tm还没敲完呢。所以在input标签失去焦点的时候进行验证还是不错的,因为这时基本上可以代表用户觉得我输入完了。实际不早也不晚。
3.ng-repeat和filter
<span ng-repeat="re in regPassword.regList|filter:regPassword.regVal">{{re.tips}}</span>
ng-repeat在我看来就是根据数据长度来自定义html结构的 常用在<li> <table>之类的数据展示情景中。写起来有点像for in循环
比如上面的例子,在不考虑filter的情况下,span标签的数量就是regPassword.regList中的元素个数,这个用来遍历的对象可以是数组或者对象。
filter的作用就是在它们当中筛选出需要的字符串,当然还有其他的过滤器,自己看看就明白了,都是api。filter的意思是筛选出符合regPassword.regVal的re。嗯,当然后面写个true的话就变成了不是包含而是必须完全匹配。
这一部分相对简单,所以能省则省。下一步写关于angular非常重要的一部分,路由(ng-route)。
AngularJS学习笔记(二) 表单验证案例(ng-repeat/filter)的更多相关文章
- Bootstrap学习笔记(二) 表单
在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...
- Django学习笔记之表单验证
表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...
- JavaScript入门学习笔记(表单验证)
表单验证: 在数据被送到服务器之前对HTML表单中的输入数据进行验证,避免服务器频繁验证信息造成用户体验差. (1)表单数据是否为空 (2)输入的信息格式是否正确 (3)输入数据的类型是否正确 必填( ...
- JavaScript 表单验证 案例
JavaScript 表单验证 案例 版权声明:未经授权,严禁转载! 编写 HTML 文件,搭建主体界面 <html> <head> <meta charset=&q ...
- 使用jquery插件validate制作的表单验证案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- AngularJS 1.2.x 学习笔记(表单校验篇)
https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...
- jQuery学习笔记2——表单操作
一.获取和设置表单的值:val()和text() 1. 获取表单的值: $("#username").val(); 2. 设置表单的值: $("#username&quo ...
- jQuery表单验证案例
目标:使用jQuery进行表单验证. 功能:1.必填选项后面添加了红色小星星: 2.选中开始输入时,输入文本框会改变当前背景色,增强用户体验: 3.输入的时候就开始验证,当输入格式正确就会提醒,就是当 ...
- AngularJs 入门系列-2 表单验证
对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...
随机推荐
- 通过pyenv进行多版本python管理
1.安装pyenv brew install pyenv 2.配置.zshrc文件 export PYENV_ROOT=/usr/local/var/pyenv if which pyenv > ...
- MySQL视图概述
1.介绍 在传统关系型数据库里,视图有时也被称作虚表,是基于特定SQL结果集的虚拟数据表.在有些场合会变得很方便,例如:原有系统重构,旧的数据表A和B已经被拆分和合并到数据表C.D.F里面,为了实现平 ...
- html5小趣味知识点系列(一)required
都知道这个属性是检查你 是否填写了字段也就是说咱们不用判断输入的数值是否为空的情况了 但是这个属性一定要和form配合在一起使用单独的使用是不可以实现的 <!DOCTYPE html> & ...
- 创建有提示的ui组件
using UnityEditor; using UnityEngine; using System.Collections; using Edelweiss.CloudSystem; namespa ...
- Android SQLite基本用法
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...
- vagrant系列四:vagrant搭建redis与redis的监控程序redis-stat
上一篇php7环境的搭建 真是火爆.仅仅两天时间,就破了我之前swagger系列的一片文章,看来,大家对搭建好开发环境真是情有独钟. 为了訪问量,我今天再来一篇redis的搭建. 当然不能仅仅是red ...
- mysql慢查询日志分析工具(python写的)
D:\NormalSoftware>python mysql_filter_slow_log.py ./mysql1-slow.log --no-duplicates --sort-avg-qu ...
- 【BZOJ3651】网络通信 LCT
[BZOJ3651]网络通信 Description 有一个由M 条电缆连接的 N 个站点组成的网络.为了防止垄断,由 C 个公司控制所有的电缆,规定任何公司不能控制连接同一个站点的两条以上的电缆(可 ...
- 【BZOJ3784】树上的路径 点分治序+ST表
[BZOJ3784]树上的路径 Description 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a< ...
- 5.设计模式----prototype原型模式
原型模式:做到是原型,那肯定是自己本身才是原型,原型模式属于对象的创建模式. 关于原型模式的实现方式分2种: (1)简单形式.(2)登记形式,这两种表现形式仅仅是原型模式的不同实现. package ...