这一节相对来说需要理解的东西不是太多,记住了那些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)的更多相关文章

  1. Bootstrap学习笔记(二) 表单

    在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...

  2. Django学习笔记之表单验证

    表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...

  3. JavaScript入门学习笔记(表单验证)

    表单验证: 在数据被送到服务器之前对HTML表单中的输入数据进行验证,避免服务器频繁验证信息造成用户体验差. (1)表单数据是否为空 (2)输入的信息格式是否正确 (3)输入数据的类型是否正确 必填( ...

  4. JavaScript 表单验证 案例

    JavaScript 表单验证 案例 版权声明:未经授权,严禁转载!   编写 HTML 文件,搭建主体界面 <html> <head> <meta charset=&q ...

  5. 使用jquery插件validate制作的表单验证案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. AngularJS 1.2.x 学习笔记(表单校验篇)

    https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...

  7. jQuery学习笔记2——表单操作

    一.获取和设置表单的值:val()和text() 1. 获取表单的值: $("#username").val(); 2. 设置表单的值: $("#username&quo ...

  8. jQuery表单验证案例

    目标:使用jQuery进行表单验证. 功能:1.必填选项后面添加了红色小星星: 2.选中开始输入时,输入文本框会改变当前背景色,增强用户体验: 3.输入的时候就开始验证,当输入格式正确就会提醒,就是当 ...

  9. AngularJs 入门系列-2 表单验证

    对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...

随机推荐

  1. 基于树莓派3B+Python3.5的OpenCV3.4的配置教程

    https://www.cnblogs.com/Pyrokine/p/8921285.html

  2. mysql解压版安装和卸载

    问题1:发生系统错误 5. 解决:使用管理员身份安装即可 问题2:发生系统错误 2. 解决:cd C:\Program Files\MySQL\MySQL Server 5.6\bin 进入mysql ...

  3. View Controller容器

    在 iOS 5 之前,view controller 容器是 Apple 的特权.实际上,在 view controller 编程指南中还有一段申明,指出你不应该使用它们.Apple 对 view c ...

  4. Android数据适配器(Adapter)优化:使用高效的ViewHolder

    原文链接:http://stackvoid.com/using-adapter-in-efficiency-way/ 在使用Listview或GridView的时候,往往须要自己定义数据适配器.一般都 ...

  5. java getResourcesAsStream()如何获取WEB-INF下的文件流

    getResourcesAsStream()来读取.properties文件,但是getResourcesAsStream()仅在java项目时能获取根目录的文件: 在web项目中,getResour ...

  6. Linux 安装OpenSSL出错的解决方法

    以前编译php没有 –with–openssl 现在要使用到 openssl ,phpinze扩展安装,但是在make时候报错 今天找这个在网上找了大半天,最后总结应该是php版本本身的问题,错误是p ...

  7. 1、Codevs 必做:2833、1002、1003、2627、2599

    2833 奇怪的梦境  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Aiden陷入了一个奇怪的梦境:他被困 ...

  8. mysql数据库访问授权

    1.进入MySQL服务器 d:\mysql\bin\> mysql -h localhost -u root; 2.赋予任何主机访问数据的权限 mysql> GRANT ALL PRIVI ...

  9. vue表单输入的绑定

    vue的核心:声明式的指令和数据的双向绑定. 那么声明式的指令,已经给大家介绍完了.接下来我们来研究一下什么是数据的双向绑定? 另外,大家一定要知道vue的设计模式:MVVM M是Model的简写,V ...

  10. - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, ma

    $ composer install Loading composer repositories with package information Installing dependencies (i ...