需求
名字必填用户名非必填,最小长度3,最大长度8封电子邮件非必填,但必须是合法的电子邮件验证未通过的表单不能提交显示一个必填或者非法电子邮件格式的错误信息如果正确提交就弹出一个祝贺信息现在知道我们的目标了吧,让我们一起来构建这个东西吧。
有角的的表单属性$有效,$无效,$原始,$肮脏
有角的提供了有关表单的属性来帮助我们验证表单。他们给我们提供了各种有关一个表单及其输入的信息,并且应用到了表单和输入。属性类描述
$有效的布尔值告诉我们这一项当前基于你设定的规则是否验证通过$无效的ng-无效的布尔值告诉我们这一项当前基于你设定的规则是否验证未通过$原始ng-原始布尔值如果表单或者输入框没有使用则为真$脏ng-脏布尔值如果表单或者输入框有使用到则为真实角度也提供了有关表单及其输入框的类,以便你能够依据每一个状态设置其样式。访问表单属性
方位表单:表单名称。有角的属性访问一个输入框:表单名称。输入名称。角度属性设置我们的表单
我们将使用一个简单的表单来做演示。
我们将需要两个文件:
index.html我们用来显示表单的代码app.js我们的有角的应用程序和控制器(几乎没有任何代码)我们的表单代码index.html
!index.html!DOCTYPE htmlhtmlhead!-CSS===========================================-!-加载引导-链接rel='样式表href=' http://netdna。bootstrapcdn。com/bootstrap/3。0 .3/CSS/bootstrap。量滴CSS ' style body { padding-top :30 px;} /style!-JS==========================================-!-加载angular-script src=' http :3358代码。棱角分明的js。org/12 .6/棱角分明。js '/script script src=' http : app。js '/脚本/头!-将角度应用和控制器应用到我们的身体上-body ng-app=' validation app ' ng-controller=' main controller ' div class=' container ' div class=' col-sm-8 col-sm-offset-2 '!-PAGE HEADER-div class=' PAGE-HEADER ' h1 angular js表单验证/h1/div!- FORM -!-如果我们的表单有效或无效,则传入变量-表单名称='用户表单' ng-submit='提交表单(用户表单.$valid)' novalidate!- novalidate阻止HTML5验证,因为我们将验证自己-!-NAME-div class=' form-group '标签名称/标签输入类型=' text ' NAME=' NAME ' class=' form-control ' ng-model=' NAME '必选/div!-USERNAME-div class=' form-group ' label luser name/label输入类型=' text ' name=' USERNAME ' class=' form-control ' ng-model=' user。USERNAME ' ng-最小长度=' 3 ' ng-最大长度=' 8 '/div!-EMail-div class=' form-group '标签邮件/标签输入类型=' EMail ' name=' EMail ' class=' form-control ' ng-model=' EMail '/div!-SUBMIST BUTTON-BUTTON类型=' SUBMIST ' class=' BTN BTN-primary ' SubmIt/BUTTON/form/div!- col-sm-8 - /div!-/容器-/正文/html这里列出了一些关键点:
novalidate:它将会组织默认的HTML5验证,因为这会由我们自己来做(我们自己的将会更棒)我们在输入框上应用了尼日利亚模型,以便将来自表单的数据绑定到有角的变量用户名上的ng-minlength和ng-maxlength会自己创建其规则名字输入框是必填的电子邮件输入框有属性type="email "验证规则
有角的有很多验证规则,像是童敏愣是比dng-max还长。
有角的还可以自己配置规则。有角的输入指引上有说明。
输入ng-model=' { string } ' name=' { string } ' required ng-required=' { boolean } ' ng-min length=' { number } ' ng-maxlength=' { number } ' ng-pattern=' { string } ' ng-change=' { string } '/input现在建好了表单,接着创建有角的应用和控制器,ng-app ng-控制器。应用的Codeapp.js
//app.js//创建angular appvar验证app=angular。模块('验证app ',[]);//创建angular controllervalidationapp。控制器('主控制器',函数($scope) { //在所有验证完成后提交表单的函数$ scope。提交表单=函数(isValid){//检查以确保表单完全有效if (isValid) { alert('我们的表单太神奇了');} };});使HTML5验证器的novalidate
我们将在我们的表单使用novalidate。这是一个很好的做法,因为我们将会自己处理验证。如果我们让我们的表单这样做,它看起来很丑陋。
禁用提交按钮ng-禁用
现在真正的好戏上演了。我们开始使用有角的的属性。首先让我们禁用我们的提交按钮。如果我们的表单是$无效的,我们只想禁用它。
!index.html.-SUBMIST BUTTON-BUTTON类型=' SUBMIST ' class=' BTN BTN-主' ng-disabled=' UserFOrm .$无效的"提交/按钮".只使用一点代码(ng-禁用),如果我们的表单是$无效的,表单按钮将被禁用。这意味着,我们的姓名输入字段是必需的,并且电子邮件输入字段需要一个有效的电子邮件。
用英语表演显示错误信息
ng-有效和ng-无效会基于提供的表单规则自动验证输入的有效性。
咱们在输入部分加一些错误信息,只要不等于$有效或是已经使用过的就行(不能展示还没使用).
!index.html.-NAME-div class=' form-group '标签名称/标签输入类型=' text ' NAME=' NAME ' class=' form-control ' ng-model=' NAME '必需的p ng-show=' userform。名称。$无效!用户表单。名称。$ purify ' class=' help-block '您的名称是必需的/p /div!-USERNAME-div class=' form-group ' label luser name/label输入类型=' text ' name=' USERNAME ' class=' form-control ' ng-model=' user。USERNAME ' ng-最小长度=' 3 ' ng-最大长度=' 8 ' p ng-show=' userform。用户名。$错误。最小长度' class=' help-block ' USERNAME太短/p p ng-show=' userform。用户名。$错误。maxlength ' class=' help-block '用户名太长/p /div!-EMail-div class=' form-group '标签邮件/标签输入类型=' EMail ' name=' EMail ' class=' form-control ' ng-model=' EMail ' p ng-show=' user form。电子邮件。$无效!请输入有效的电子邮件/p /div .就像这样有角的会根据规则来验证输入部分的$无效和$原始资产属性从而决定是否显示错误信息。
格局类
有角的在验证输入或表单时的有效有否是已经提供了一些类,像是(ng-有效,ng-无效,ng-pristinand和ng-脏)。
你可以编辑自己喜欢的CSS .你可以私有定制化这些类来实现特定的场景应用。ng-有效{ }。ng-无效的{ }。ng-原始{ }。ng-dirty { }/*棱角分明应用的真正特定的钢性铸铁规则*/。ng-无效-必需的{ }。ng-无效-minlength { } .ng-有效-最大长度{ }使用尼日利亚级根据条件添加类
因为我们使用了自举,我们将就使用它们提供的类(有错误).这样就能围绕我们的形式组获得漂亮的错误信息和颜色。
尼日利亚级允许我们基于一个表达式添加类。在这种情况下,我们想要想我们的形式组添加一个有错误类,如果输入框的状态是$无效或者不是纯朴的的话。
其工作的方式是ng-class=' { 0要计算的:表达式} '。更多的信息,请读一读角度ngClass文档吧。
!index.html.- NAME - div类=' form-group ' ng-class=' { ' has-error ' : UserFORm . NAmE . $无效!userform . name . $ purify } ' label name/label input type=' text ' name=' name ' class=' form-control ' ng-model=' user . name '必需的p ng-show=' userform . name . $无效!用户表单.名称. $ purify ' class=' help-block '您的名称是必需的。/p /div!-USERNAME-div class=' form-group ' ng-class=' { ' has-error ' : UserFORm . USERNAME . $无效!userform . username . $ purify }“label username/label input type=”text”name=“username”class=“form-control”ng-model=“user . username”ng-min length=“3”ng-max length=“8”p ng-show=“userform . username . $ e rror . min length”class=“help-block”username太短。/p p ng-show=' userform . username . $ error . maxlength ' class=' help-block ' username太长。/p /div!-EMail-div class=' form-group ' ng-class=' { ' has-error ' : Userform . EMail . $无效!userform . email . $ purify } ' label mail/label input type=' email ' name=' email ' class=' form-control ' ng-model=' user . email ' p ng-show=' userform . email . $无效!用户表单。电子邮件。$ purify ' class=' help-block '输入有效的电子邮件。/p/div.现在我们的表单有了一个合适的Bootstrap错误类。
仅在提交表单后显示错误消息
有时我不想在用户键入时显示错误消息。当用户输入表单时,当前的错误消息将立即显示。由于Angular出色的数据绑定特性,这是可能发生的。因为所有的事务都可以在瞬间改变,所以表单验证会有副作用。
对于希望仅在表单即将提交后显示错误消息的情况,您需要对上述代码进行一些小的调整。
您需要从提交按钮中删除ng-disabled,因为我们希望用户即使表单尚未完全验证也能单击提交。表单提交后,您需要添加一个变量。在submitForm()函数中,只需添加$ scope.submitted=true。表单提交后,它将保存提交的变量,提交值为true。将错误规则从ng-class=' { ' has-error ' : user form . name .更改为$无效!user form . name . $ purify }调整为ng-class=' { ' has-error ' : user form . name . $无效!用户表单。名字。$ Purify已提交}”。这确保了只有在提交表单时才会显示错误消息。您可能需要为此变量调整所有其他ng类和ng显示。现在,只有当提交的变量设置为true时,才会显示错误消息。只有在输入框外单击时,才会显示错误消息。
仅在输入框外单击时显示错误消息的要求(也称为失焦模糊)比提交时验证要复杂一点。失焦时验证表单需要自定义指令。这是一个允许你操作DOM的指令。
我们正在写一篇专门讨论这个话题的文章。同时,还有其他资源可以讨论创建自定义指令来处理失去焦点的情况:
完成预览
现在,一旦我们正确填写了所有信息,我们的表单提交按钮就可以使用了。提交表单后,我们将看到我们设置的弹出消息。
我们可以在几行中使用:
输入框验证显示表单错误消息。自定义样式类自动禁止和启用表单自定义规则。如您所见,我们使用Angular的内置表单验证技术来创建客户端验证表单。