关于AngularJs,数据绑定与自定义验证

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

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

首先,肯定是引用

1 <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的。
 1 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");
 2
 3     function bindRep(app, controller, url, validation, bind) {
 4         var appData = angular.module(app, []);
 5         appData.controller(controller, function ($scope, $http) {
 6             $http.get(url)
 7            .success(function (response) { $scope.pageData = response.Data; });
 8         });
 9         appData.directive(bind, [
10                function () {
11                    return {
12                        require: "ngModel",
13                        link: function (scope, element, attr, ngModel) {
14                            if (ngModel) {
15                                var idCardsRegexp = eval(validation);
16                                console.log(idCardsRegexp);
17                            }
18                            debugger;
19                            var customValidator = function (value) {
20                                var validity = ngModel.$isEmpty(value) || idCardsRegexp.test(value);
21                                ngModel.$setValidity(bind, validity);
22                                return validity ? value : undefined;
23                            };
24                            ngModel.$formatters.push(customValidator);
25                            ngModel.$parsers.push(customValidator);
26                        }
27                    };
28                }
29         ]);
30     }

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

 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>
时间: 2024-08-05 12:55:55

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

angularJS中自定义验证指令中的$parsers and $formatters

本文翻译自:$parsers and $formatters in Custom Validation Directives in Angular JS 在使用angularJS的应用中,有时候我们需要定义自己的表单验证.自定义验证在angularJS中是通过创建指令来实现的,该指令依赖于ng-model指令,主要是依赖于它的controller. ng-model指令提供2个由函数组成的数组: $parsers 和 $formatters,这些函数用于实现自定义验证逻辑时调用.这两个数组的用途

angularjs的表单验证问题

angularjs表单验证问题 1 可以使用angularjs自带验证,(必填项.email.url)使用方法: 通过myForm.personEmail.$valid是否为true 即可判断是否通过验证.具体是哪类错误可以通过demo: <input type="text" required />  必填 <input type="text" ng-minlength="5" /> 最小长度 <input type

AngularJs的表单验证

能够根据用户在表单中输入的内容给出实时视觉反馈是非常重要的.在人与人沟通的语境中,表单验证给出来的反馈同获得正确输入同等重要. 如果想要屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加novalidate标记. <form name="form" novalidate><label name="email">Your email</label><input type="email"name="

AngularJS入门之数据验证

AngularJS自带了对表单或控件的输入数据进行验证的功能,对于Html5的基础控件均有内建的验证器,以下列举了所有支持的验证类型: email max maxlength min minlength number pattern required url date datetimelocal time week month AngularJS会在元素上自动添加如下样式: ng-valid: 验证通过 ng-invalid: 验证失败 ng-valid-[key]: 由$setValidity

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

Angular 的数据绑定采用什么机制,详述原理? 脏检查机制.阐释脏检查机制,必须先了解如下问题. 单向绑定(ng-bind) 和 双向绑定(ng-model) 的区别? ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}. 两者的区别在于页面没有加载完毕 {{val}} 会直接显示到页面,直到 Angular 渲染该绑定数据(这种行为有可能将 {{val}} 让用户看到):而 ng-bind 则是在 Angular 渲染完毕后将数据显示. ng-

Laravel 5.5 的自定义验证对象/类

本文和大家分享的主要是Laravel 5.5 的自定义验证对象/类相关内容,一起来看看吧,希望对大家学习Laravel有所帮助. Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代. Laravel 中的表单验证是比较方便的,而且内置了大量的可用验证规则,但不管官方提供了多少,总还是会有满足不了需求的时候.很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend来扩展一个自

AngularJS 数据绑定

AngularJS中的数据绑定,同步了AngularJS表达式和AngularJS数据. <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="X-UA-Compatible"content="IE=edge&q

基于angularJS的表单验证练习

今天看了一下angularJS的表单验证,看的有点云里雾里(也有可能是雾霾吸多了),于是做了一个小练习来巩固一下. html: <div ng-controller="Aaa"> <form novalidate name="loginForm"> <div> <label>用户名</label> <input type="text" name="nText"

sencha touch Model validations 自定义验证 二选一输入验证、重复验证

项目初始化时执行以下代码 1 //重写模型,方便进行自定义验证 2 Ext.define("Ext.zh.data.Model", { 3 override: "Ext.data.Model", 4 validate: function () { 5 var errors = Ext.create('Ext.data.Errors'), 6 validations = this.getValidations().items, 7 validators = Ext.d