修炼爱情 發表於 2020-8-4 20:55:00

angular表单验证

<h5>1、添加form标签</h5>
<p>1、页面中添加form标签,并为form标签添加一个指令 #form=”ngForm”(#后的表单名称是自定义的,这里是为在表单提交的时候,按钮禁用做准备)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">form </span><span style="color: rgba(255, 0, 0, 1)">(ngSubmit)</span><span style="color: rgba(0, 0, 255, 1)">="btnHandle('login')"</span><span style="color: rgba(255, 0, 0, 1)"> #loginForm</span><span style="color: rgba(0, 0, 255, 1)">="ngForm"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">form</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<h5>2、form标签内input输入框的属性</h5>
<p>2.1、给form标签下所有input标签添加name属性,不然控制台会报错,报错信息是让添加name属性或者是添加=”{standalone : true}”<br>2.2、使用[(ngModel)]双向绑定数据,并通过#(需要验证字段的名称,这里也是自定义的)=”ngModel”,来指向绑定的输入框。添加需要校验的正则表达式,pattern=”^1\d{9}$”,如果是必填项,添加required属性。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">input </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="number"</span><span style="color: rgba(255, 0, 0, 1)"> [(ngModel)]</span><span style="color: rgba(0, 0, 255, 1)">="loginData.telphone"</span><span style="color: rgba(255, 0, 0, 1)"> pattern</span><span style="color: rgba(0, 0, 255, 1)">="^1\d{9}$"</span><span style="color: rgba(255, 0, 0, 1)"> placeholder</span><span style="color: rgba(0, 0, 255, 1)">="请输入手机号" </span><span style="color: rgba(255, 0, 0, 1)">required #mobile</span><span style="color: rgba(0, 0, 255, 1)">="ngModel"</span><span style="color: rgba(255, 0, 0, 1)"> name</span><span style="color: rgba(0, 0, 255, 1)">="loginData.telphone"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span></pre>
</div>
<h5>3、添加校验信息</h5>
<p>3.1、通过 ngModel 跟踪修改状态与有效性验证,在表单中使用 ngModel 可以获得比仅使用双向数据绑定更多的控制权。它还会告诉你很多信息:用户碰过此控件吗?它的值变化了吗?数据变得无效了吗?NgModel 指令不仅仅跟踪状态。它还使用特定的 Angular CSS 类来更新控件,以反映当前状态。 可以利用这些 CSS 类来修改控件的外观,显示或隐藏消息。</p>
<p><img src="https://i.loli.net/2019/11/22/BrCpchfqFOUTais.png" alt="image.png"></p>
<p>3.2、往 input标签上添加名叫 spy 的临时模板引用变量, 然后用这个 spy 来显示它上面的所有 CSS 类。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="input_item"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>手机号<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">input </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="number"</span><span style="color: rgba(255, 0, 0, 1)"> [(ngModel)]</span><span style="color: rgba(0, 0, 255, 1)">="loginData.telphone"</span><span style="color: rgba(255, 0, 0, 1)"> pattern</span><span style="color: rgba(0, 0, 255, 1)">="^1\d{9}$"</span><span style="color: rgba(255, 0, 0, 1)"> placeholder</span><span style="color: rgba(0, 0, 255, 1)">="请输入手机号"</span><span style="color: rgba(255, 0, 0, 1)"> required #mobile</span><span style="color: rgba(0, 0, 255, 1)">="ngModel"</span><span style="color: rgba(255, 0, 0, 1)"> name</span><span style="color: rgba(0, 0, 255, 1)">="loginData.telphone"</span><span style="color: rgba(255, 0, 0, 1)"> #spy </span><span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>{{spy.className}}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>(1)未进行任何操作的时候<br><img src="https://i.loli.net/2019/11/22/FdLHqcElOXhRevj.png" alt="微信图片_20191122182433.png"><br>(2)输入符合pattern格式的内容<br><img src="https://img2020.cnblogs.com/blog/2082206/202104/2082206-20210422135712117-1872823372.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br>3.3、通过检查输入内容的invalid、dirty、touched,来校验数据的有效性</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="mobile.invalid &amp;&amp; (mobile.dirty || mobile.touched)"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="dhl_error"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="mobile.errors.required"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      {{validator.validate.errorMsg.tel.empty}}
</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="mobile.errors.pattern"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      {{validator.validate.errorMsg.tel.error}}
</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>这里的校验信息,在服务里面定义了相应的错误提示语,可以全局共享<br><img src="https://i.loli.net/2019/11/22/jpsuZglV5w6XcyD.png" alt="image.png"></p>
<h5>4、禁用按钮</h5>
<p>4.1、通过定义的表单名称.form.valid的反值来禁用提交按钮,如果输入的内容都有效,这个值为true,按钮才可以点击。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="!loginForm.form.valid"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="dhl_red_btn"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>登录<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>4.2、在form标签中直接提交表单,用(ngSubmit)来处理表单提交事件。<br><img src="https://i.loli.net/2019/11/22/VZch5vbJ2tH16Ga.png" alt="image.png"></p>
<h5>5、小结</h5>
<p>完整代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">form </span><span style="color: rgba(255, 0, 0, 1)">(ngSubmit)</span><span style="color: rgba(0, 0, 255, 1)">="btnHandle('login')"</span><span style="color: rgba(255, 0, 0, 1)"> #loginForm</span><span style="color: rgba(0, 0, 255, 1)">="ngForm"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
   <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="border_bottom"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="input_item"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>手机号<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">input </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="number"</span><span style="color: rgba(255, 0, 0, 1)"> [(ngModel)]</span><span style="color: rgba(0, 0, 255, 1)">="loginData.telphone"</span><span style="color: rgba(255, 0, 0, 1)"> pattern</span><span style="color: rgba(0, 0, 255, 1)">="^1\d{9}$"</span><span style="color: rgba(255, 0, 0, 1)"> placeholder</span><span style="color: rgba(0, 0, 255, 1)">="请输入手机号"</span><span style="color: rgba(255, 0, 0, 1)"> required #mobile</span><span style="color: rgba(0, 0, 255, 1)">="ngModel"</span><span style="color: rgba(255, 0, 0, 1)"> name</span><span style="color: rgba(0, 0, 255, 1)">="loginData.telphone"</span><span style="color: rgba(255, 0, 0, 1)"> #spy </span><span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="fontmedium padding15 fontSize16"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>{{spy.className}}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="mobile.invalid &amp;&amp; (mobile.dirty || mobile.touched)"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="dhl_error"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="mobile.errors.required"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
               {{validator.validate.errorMsg.tel.empty}}
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="mobile.errors.pattern"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
               {{validator.validate.errorMsg.tel.error}}
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
   <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="button"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="!loginForm.form.valid"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="dhl_red_btn"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>登录<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">routerLink</span><span style="color: rgba(0, 0, 255, 1)">="/register"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="register dhl_border_btn"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>注册<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">form</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/liyfya/p/13435853.html
頁: [1]
查看完整版本: angular表单验证