最近开始着手学起了Angular,抱着好奇的心情开始研究了起来。忽然发现angular可以巧妙而方便的进行数据的绑定验证啊什么的。(当然,我只是刚开始学,所有可能有更强大的功能,只是我还没有看到)

那么先从我学习的数据绑定和数据验证开始说起吧

首先,肯定是引用

 <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>

然后它需要一个模板

   <form ng-app="myApp" name="myForm">
<div ng-controller="MyCtryTest">
<table>
<tr>
<td>姓名</td>
<td>年龄</td>
</tr>
<tr ng-repeat="x in pageData">
<td>{{ x.Name }}</td>
<td>{{ x.Age }}</td>
</tr>
</table>
</div>
输入你的名字:
<input name="myName" ng-model="myText" required>
Email:
<input type="email" name="myAddress" ng-model="myAddressText" required>
{{myForm.myAddress.$valid}} <input multiple-idcard name="user_idCard" ng-model="user.idCard" required class="form-control" placeholder="自定义验证" />
验证通过:{{myForm.user_idCard.$valid}}
</form>
ng,是angular规定的自己属性的一个前缀,form中的app就是相当于一个代码块,也可以理解为ID吧,反正我是这么理解的。
其实它特别像MVC,它也需要一个自己的controller,来定义一个div或者什么里面需要做的事情,大家可以看到我第二行的
ng-repeat,就是定义一个循环,x in pageData,这里是不是很像foreach?x是定义的变量名, in 是数据从哪里来,
pageData就是我们的数据,那么大家肯定会问,pageData是哪里来的?大家看下面的js,在第七行中,我把response中返回的Data给了pageData,也就是说,我循环的就是从服务端取得的
数据,下面就是实例中的js,我做了一个简单的封装。
然后至于验证,像email啊,number啊,这个在angular中都有,你只要在input中,type="email"或"number"就好了,如果是非空的话,直接加一个required就好,则重需要注意的就是
{{myForm.myAddress.$valid}},这个中的myForm,指的就是你form中给的name,myAddress是input中的name,那么,$valid就是返回一个验证是否通过,true或false,主要需要
关心的,是我们的自定义验证,在整个 appData.directive 中都是为了实现自定义验证,那么,这个js和input是怎么关联起来的呢?
大家可以看一下,在input中,有一个自定义属性,multiple-idcard,那么,在我封装的js方法中的最后一个参数multipleIdcard,他们两个是不是相同的呢?那么,我们要注意的是,在
我们input中的自定义属性,中间要有一个-,在js中,-后面的首字母要大写,这样他们两就能匹配起来了。
是不是很简单?学习了下,我还是蛮喜欢angular的。
 window.onload = bindRep("myApp", "MyCtryTest", "/Data/repData.ashx", "/^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{4}$/", "multipleIdcard");

     function bindRep(app, controller, url, validation, bind) {
var appData = angular.module(app, []);
appData.controller(controller, function ($scope, $http) {
$http.get(url)
.success(function (response) { $scope.pageData = response.Data; });
});
appData.directive(bind, [
function () {
return {
require: "ngModel",
link: function (scope, element, attr, ngModel) {
if (ngModel) {
var idCardsRegexp = eval(validation);
console.log(idCardsRegexp);
}
debugger;
var customValidator = function (value) {
var validity = ngModel.$isEmpty(value) || idCardsRegexp.test(value);
ngModel.$setValidity(bind, validity);
return validity ? value : undefined;
};
ngModel.$formatters.push(customValidator);
ngModel.$parsers.push(customValidator);
}
};
}
]);
}

这是我从服务端返回的数据

 StringBuilder sbuJson = new StringBuilder();
sbuJson.AppendLine("{\"Data\":[");
sbuJson.AppendLine("{\"Name\":\"zhangsan\",\"Age\":\"18\"},");
sbuJson.AppendLine("{\"Name\":\"lisi\",\"Age\":\"19\"},");
sbuJson.AppendLine("{\"Name\":\"wangwu\",\"Age\":\"20\"},");
sbuJson.AppendLine("{\"Name\":\"zhaoliu\",\"Age\":\"21\"},");
sbuJson.AppendLine("{\"Name\":\"hehe\",\"Age\":\"22\"},");
sbuJson.AppendLine("{\"Name\":\"haha\",\"Age\":\"23\"},");
sbuJson.AppendLine("{\"Name\":\"heihei\",\"Age\":\"24\"},");
sbuJson.AppendLine("{\"Name\":\"gaga\",\"Age\":\"25\"},");
sbuJson.AppendLine("{\"Name\":\"xixi\",\"Age\":\"26\"}");
sbuJson.AppendLine("]}");
context.Response.Write(sbuJson.ToString());
context.Response.End();

这是我的style

 <style>
table, th, td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
} table tr:nth-child(odd) {
background-color: #f1f1f1;
} table tr:nth-child(even) {
background-color: #ffffff;
} input.ng-invalid {
background-color: lightblue;
}
</style>

关于AngularJs,数据绑定与自定义验证的更多相关文章

  1. angularJS中的表单验证(包括自定义验证)

    表单验证是angularJS一项重要的功能,能保证我们的web应用不会被恶意或错误的输入破坏.Angular表单验证提供了很多表单验证指令,并且能将html5表单验证功能同他自己的验证指令结合起来使用 ...

  2. 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?

    在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...

  3. 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

    这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...

  4. AngularJS 表单数据验证及错误信息提示

    一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...

  5. AngularJS入门之数据验证

    AngularJS自带了对表单或控件的输入数据进行验证的功能,对于Html5的基础控件均有内建的验证器,以下列举了所有支持的验证类型: email max maxlength min minlengt ...

  6. Angular11 模板表单、响应式表单(自定义验证器)、HTTP、表单元素双向绑定

    1 模板表单 模型通过指令隐式创建 技巧01:需要在模块级别引入 FormsModule ,通常在共享模块中引入再导出,然后在需要用到 FormsModule 的模块中导入共享模块就可以啦 impor ...

  7. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  8. 重写ValidateEntity虚方法实现可控的上下文验证和自定义验证

    上篇文章介绍了ValidationAttribute和IValidatableObject.Validate验证,但是这种验证还是稍微简单了,对于复杂的实体,例如:继承过来的实体.实现某接口的实体等等 ...

  9. jq.validate 自定义验证两个日期

    jq.validate 自定义验证两个日期 首先定义有一个表单,date1和date2是属于表单的元素,若date1大于date2,返回false:若date1<date2,返回true.使用j ...

随机推荐

  1. Magento table rates表运费设置

    在magento中集成了Table rate表运费,这种运输方式.表运费就是我们自己写个运费表,根据距离和商品重量设置运费,制做成一张csv格式的表,导入到magento中,来实现运费的控制. 在我的 ...

  2. SqlServer删除表中重复记录

    重复记录:有两个意义上的重复记录 一是完全重复的记录,也即所有字段均重复的记录: 二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 1.对于第一种重复,比较容易 ...

  3. 升级win8.1后mysql服务不能启动的问题

    升级win8.1后发现服务列表中MySQL55不见了. 1. 先把服务恢复. mysql没有看到maitenance,找到安装文件 mysql-installer-community-5.6.12.0 ...

  4. VS2012完全卸载与VS2013安装

    项目本来使用的是vs2012 Ultimate,也一直跟随ms的节奏安装了从1到4的update,但一些无法忍受的问题却一直没有解决: 1.偶尔出现要等待编辑器响应的情况: 2.偶尔输入了冒号也不会出 ...

  5. log4net应用

    1,配置文件 如果放在Web.config文件中,要放在根节点<configuration>下. 但一般为了方便配置文件的修改,可以将配置文件独立于Web.config,而单独放在一个文本 ...

  6. sys.stdout.write与sys.sterr.write(二)

    目标: 1.使用sys.stdout.write模拟火车道轨迹变化过程 2.使用sys.stderr.write模拟火车道轨迹变化过程 1.sys.stdout.write模拟火车道轨迹变化 代码如下 ...

  7. VS2015 + Cordova Html5开发使用Crosswalk Web引擎

    CrossWalk引擎的好处是统一不同android设备的Html5的差异性,据说速度很快. Vs2015中使用非常简单,作为一个Apache Cordova的插件安装即可: Installing t ...

  8. 按钮点击,打开qq,用做联系客服

    给按钮做链接 <a target=blank href=tencent://message/?uin=这里写QQ号&Site=某某&Menu=yes><img bor ...

  9. post- build event

    Ref:http://blog.csdn.net/teng_ontheway/article/details/8307410 Ref: http://blog.csdn.net/sodickbird/ ...

  10. Web页面中5种超酷的Hover效果

    hover 效果能给网页增加一些动态效果,并且使得站点更具有活力.原来的做法是使用javascript来实现这些动态效果,但是随着CSS3的引入和现代浏览器 的支持,我们可以用纯粹的CSS代码来实现这 ...