发表于: 2017-05-14 23:31:21

1 806


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

表单验证<AngularJs>

常用的表单验证指令 

1. 必填项验证

某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:

<input type="text" required />  

2. 最小长度

验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}":

<input type="text" ng-minlength="5" /> 

3. 最大长度

验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength="{number}":

<input type="text" ng-maxlength="20" />

4. 模式匹配

使用ng-pattern="/PATTERN/"来确保输入能够匹配指定的正则表达式:

<input type="text" ng-pattern="/[a-zA-Z]/" /> 

5. 电子邮件

验证输入内容是否是电子邮件,只要像下面这样将input的类型设置为email即可:

<input type="email" name="email" ng-model="user.email" /> 

6. 数字

验证输入内容是否是数字,将input的类型设置为number:

<input type="number" name="age" ng-model="user.age" /> 

7. URL

 验证输入内容是否是URL,将input的类型设置为 url:

<input type="url" name="homepage" ng-model="user.facebook_url" />



明天计划的事情:(一定要写非常细致的内容) 

继续研究AngularJS自定义指令


遇到的问题:(遇到什么困难,怎么解决的) 

ng1.3+以后对于表单验证有了优化,它不再需要一个详细的表达式状态创建元素显示或隐藏。

例如:我们在ng1.3之前的版本都需要如下写法:

<div class="error" ng-show="signup_form.name.$dirty && signup_form.name. $invalid && signup_form.submitted">

ng1.3之后新增了一个ngMessages指令,他被打包成一个模块发布,因此我们使用的时候只需要将这个依赖模块引入即可

angular.module('myApp', ['ngMessages']); 

怎么用?

现在我们学习一下,它的用法,Code如下:

复制代码
<!DOCTYPE html><html ng-app="myTest">
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" />
        <script src="~/Javascript/angular.js"></script>
        <script src="~/Javascript/angular-messages.js"></script>

        <style type="text/css">
            body {
                padding-top: 30px;
            }
        </style>
    </head>
    <body>
        <div class="col-md-6">
            <form role="form" name="myForm" class="form-horizontal" novalidate>
                <div class="form-group">
                    <div class="col-md-2">
                        用户名                    </div>
                    <div class="col-md-10">
                        <input type="text" placeholder="ng-Messages测试" name="name" ng-model="username.name"
                               ng-minlength=3 ng-maxlength=20 required />
                        <hr/>
                        $error:{{myForm.name.$error}}                        <hr/>
                        <div ng-messages="myForm.name.$error">
                            <div ng-message="required">必填项</div>
                            <div ng-message="minlength">字符太短小于3</div>
                            <div ng-message="maxlength">字符太长大于20</div>
                        </div> 
                    </div>
                </div>
            </form>
        </div>
    </body></html><script type="text/javascript">
     angular.module("myTest", ['ngMessages']);</script>
复制代码

效果如下:

可以看出,其实ng是通过$error来监视模型的变化,因为$error中包含了错误的详细信息,同时,如果我们的应用场景中如果同时,有好几处错误,那么,上面代码按照ng-message的顺序只会显示一条错误信息,如果我们需要全部显示出来只需要添加 ng-messages-multiple

复制代码
 <input type="text" placeholder="测试" name="name" ng-model="username.name" ng-minlength=3 ng-maxlength=20 required />
<div ng-messages="myForm.name.$error" ng-messages-multiple>
    <div ng-message="required">必填项</div>
    <div ng-message="email">邮件格式不对</div>
    <div ng-message="minlength">字符太短小于3</div>
    <div ng-message="maxlength">字符太长大于20</div></div> 
复制代码

效果如下:

怎么复用?

我们的验证信息在一个项目中大多是通用性很高的(对于样式,描述等都有高度的统一性),因此我们这里也会考虑到复用,ng中同样提供了解决方案

就是将其作为模板,指定请求路径由ng自动添加。这里再介绍一个指令 ng-messages-include

我们将上面的验证信息保存到一个独立的html静态页面中,然后使用ng-messages-include指定请求路径即可。

Code:

  <div ng-messages="myForm.name.$error" ng-messages-multiple
        ng-messages-include ="@Url.Content("~/Content/template/error.html")">
   </div> 

error.html

<div ng-message="required">必填项</div><div ng-message="email">邮件格式不对</div><div ng-message="minlength">字符太短小于3</div><div ng-message="maxlength">字符太长大于20</div>

效果如下:

当然,模板可能在特殊的时期某些字段错误提示不能满足你的要求,你可以添加自定义的提示如下:

复制代码
<div class="error" ng-messages="signup_form.name.$error" ng-messages-include="templates/errors.html"> <!-- 
   按ng-message的顺序依次覆盖--> </div> 
复制代码

 

      自定义验证(指令)涉及到的细节知识点很多,如果简单地为了用而用,可能写得出功能,但是代码丑陋,太菜了,还需要花个把月方能弄懂 点皮毛,这部分暂告一段落,等彻底明白了,在大家分享,之后会对指令,服务先行学习下...


收获:(通过今天的学习,学到了什么知识)

屏蔽浏览器对表单的默认验证行为

在表单元素上添加novalidate标记即可,问题是我们怎么知道我们的表单有哪些字段是有效的,那些事非法或者无效的?ng对此也提供了非常棒的解决方案,表单的属性可以在其所属的$scope对象中访问到,而我们又可以访问$scope对象,因此JavaScript可以间接地访问DOM中的表单属性。借助这些属性,我们可以对表单做出实时响应。

可以使用formName.inputFieldName.property的格式访问这些属性。

未修改过的表单

布尔值属性,表示用户是否修改了表单。如果为ture,表示没有修改过;false表示修改过:

formName.inputFieldName.$pristine;

修改的表单

布尔型属性,当且仅当用户实际已经修改的表单。不管表单是否通过验证:

formName.inputFieldName.$dirty

 

经过验证的表单

布尔型属性,它指示表单是否通过验证。如果表单当前通过验证,他将为true:

formName.inputFieldName.$valid

未通过验证的表单

formName.inputFieldName.$invalid

 

最后两个属性在用于DOM元素的显示或隐藏时是特别有用的。同时,如果要设置特定的class时,他们也非常有用的。

错误

这是AngularJS提供的另外一个非常有用的属性:$error对象。它包含当前表单的所有验证内容,以及它们是否合法的信息。用下面的语法访问这个属性

formName.inputfieldName.$error

如果验证失败,这个属性的值为true;如果值为false,说明输入字段的值通过了验证。




返回列表 返回列表
评论

    分享到