>웹 프론트엔드 >JS 튜토리얼 >AngularJS_AngularJS의 양식 유효성 검사 프로그래밍에 대한 자세한 해석

AngularJS_AngularJS의 양식 유효성 검사 프로그래밍에 대한 자세한 해석

WBOY
WBOY원래의
2016-05-16 15:53:591228검색

수요

  • 이름 필수
  • 사용자 이름은 선택 사항이며 최소 길이는 3자, 최대 길이는 8자입니다
  • 이메일은 필수는 아니지만 합법적인 이메일이어야 합니다
  • 검증에 실패한 양식은 제출할 수 없습니다.
  • 필수 또는 불법 이메일 형식 오류 메시지 표시
  • 정확하게 제출하시면 축하 메시지가 뜹니다

이제 우리의 목표를 알았으니 함께 만들어 봅시다.

Angular 형식 속성 $valid, $invalid, $pristine, $dirty

Angular는 양식의 유효성을 검사하는 데 도움이 되는 양식에 대한 속성을 제공하며 양식과 입력에 대한 다양한 정보를 제공하고 양식과 입력에 적용합니다.
속성 클래스
설명

  • $valid ng-valid 부울은 이 항목이 설정한 규칙에 따라 현재 확인되었는지 여부를 알려줍니다
  • $invalid ng-invalid 부울은 이 항목이 현재 설정한 규칙에 따라 확인에 실패하는지 여부를 알려줍니다.
  • $pristine ng-pristine Boolean 양식이나 입력 상자를 사용하지 않는 경우 참
  • $dirty ng-dirty Boolean 양식이나 입력 상자를 사용하는 경우 참

Angular는 각 상태에 따라 스타일을 설정할 수 있도록 폼과 입력 상자에 대한 클래스도 제공합니다.
양식 속성에 액세스

  • 방향 형식: 3271c2b1172180d33200050901640c1e.b108af2ed85f8da19131b90b09999752
  • 입력 상자에 액세스: ..

양식 설정

간단한 양식을 사용하여 시연하겠습니다.

201561995404669.png (765×364)

두 개의 파일이 필요합니다:

  1. index.html 양식을 표시하는 데 사용하는 코드
  2. app.js Angular 애플리케이션 및 컨트롤러(코드가 거의 없음)

양식 코드 index.html

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <!-- CSS ===================== -->
  <!-- load bootstrap -->
  <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> 
  <style>
    body   { padding-top:30px; }
  </style>
   
  <!-- JS ===================== -->
  <!-- load angular -->
  <script src="http://code.angularjs.org/1.2.6/angular.js"></script> 
  <script src="app.js"></script>
</head>
 
<!-- apply angular app and controller to our body -->
<body ng-app="validationApp" ng-controller="mainController">
<div class="container">
<div class="col-sm-8 col-sm-offset-2">
   
  <!-- PAGE HEADER -->
  <div class="page-header"><h1>AngularJS Form Validation</h1></div>
  
  <!-- FORM -->
  <!-- pass in the variable if our form is valid or invalid -->
  <form name="userForm" ng-submit="submitForm(userForm.$valid)" novalidate> <!-- novalidate prevents HTML5 validation since we will be validating ourselves -->
 
    <!-- NAME -->
    <div class="form-group">
      <label>Name</label>
      <input type="text" name="name" class="form-control" ng-model="name" required>
    </div>
 
    <!-- USERNAME -->
    <div class="form-group">
      <label>Username</label>
      <input type="text" name="username" class="form-control" ng-model="user.username" ng-minlength="3" ng-maxlength="8">
    </div>
     
    <!-- EMAIL -->
    <div class="form-group">
      <label>Email</label>
      <input type="email" name="email" class="form-control" ng-model="email">
    </div>
     
    <!-- SUBMIT BUTTON -->
    <button type="submit" class="btn btn-primary">Submit</button>
     
  </form>
 
</div><!-- col-sm-8 -->
</div><!-- /container -->
</body>
</html>

몇 가지 핵심 사항은 다음과 같습니다.

  • novalidate: 기본 HTML5 유효성 검사를 방지합니다. 왜냐하면 우리가 직접 수행하기 때문입니다(우리 자신이 더 나을 것입니다).
  • 입력 상자에 ng-model을 적용하여 양식의 데이터를 각도 변수에 바인딩했습니다.
  • 사용자 이름의 ng-minlength 및 ng-maxlength는 자체 규칙을 생성합니다
  • 이름 입력란은 필수입니다
  • 이메일 입력 상자에는 type="email" 속성이 있습니다


검증 규칙

Angular에는 dng-max 길이보다 tong-min 길이 등 많은 검증 규칙이 있습니다.

Angular는 자체 규칙을 구성할 수도 있습니다.

<input
  ng-model="{ string }"
  name="{ string }"
  required
  ng-required="{ boolean }"
  ng-minlength="{ number }"
  ng-maxlength="{ number }"
  ng-pattern="{ string }"
  ng-change="{ string }">
</input>

이제 양식이 생성되었으므로 Angular 애플리케이션과 컨트롤러인 ng-app ng-controller를 만듭니다.
Codeapp.js 적용

// app.js
// create angular app
var validationApp = angular.module('validationApp', []);
 
// create angular controller
validationApp.controller('mainController', function($scope) {
 
  // function to submit the form after all validation has occurred      
  $scope.submitForm = function(isValid) {
 
    // check to make sure the form is completely valid
    if (isValid) {
      alert('our form is amazing');
    }
 
  };
 
});


HTML5 유효성 검사기의 유효성 검사 취소 활성화

우리는 양식에 novalidate를 사용합니다. 유효성 검사는 우리가 직접 처리하므로 이는 좋은 습관입니다. 우리의 폼이 이렇게 하도록 놔두면 보기 흉해 보일 것입니다.

201561995443961.png (641×170)

제출 버튼 비활성화 ng-disabled

이제 진짜 쇼가 시작됩니다. Angular 속성을 사용하기 시작합니다. 먼저 제출 버튼을 비활성화하겠습니다. 양식이 $invalid인 경우 해당 양식을 비활성화하고 싶습니다.

<!-- index.html -->
...
 
  <!-- SUBMIT BUTTON -->
  <button type="submit" class="btn btn-primary" ng-disabled="userForm.$invalid">Submit</button>
 
...

단지 약간의 코드(ng-disabled)만 사용하면 양식이 $invalid인 경우 양식 버튼이 비활성화됩니다.
이는 이름 입력 필드가 필수이고 이메일 입력 필드에는 유효한 이메일이 필요함을 의미합니다.

eng-show를 사용하여 오류 메시지 표시

ng-valid 및 ng-invalid는 제공된 양식 규칙에 따라 입력 내용을 자동으로 검증합니다.

$valid와 같지 않거나 사용된 경우(미사용으로 표시할 수 없음) 입력 부분에 일부 오류 정보를 추가합니다.

<!-- index.html -->
...
 
  <!-- NAME -->
  <div class="form-group">
    <label>Name</label>
    <input type="text" name="name" class="form-control" ng-model="name" required>
    <p ng-show="userForm.name.$invalid && !userForm.name.$pristine" class="help-block">You name is required.</p>
  </div>
 
  <!-- USERNAME -->
  <div class="form-group">
    <label>Username</label>
    <input type="text" name="username" class="form-control" ng-model="user.username" ng-minlength="3" ng-maxlength="8">
    <p ng-show="userForm.username.$error.minlength" class="help-block">Username is too short.</p>
    <p ng-show="userForm.username.$error.maxlength" class="help-block">Username is too long.</p>
  </div>
   
  <!-- EMAIL -->
  <div class="form-group">
    <label>Email</label>
    <input type="email" name="email" class="form-control" ng-model="email">
    <p ng-show="userForm.email.$invalid && !userForm.email.$pristine" class="help-block">Enter a valid email.</p>
  </div>
 
...

就像这样 Angular 会根据规则来验证输入部分的$invalid 和 $pristine properties属性从而决定是否显示错误信息.

201561995503615.png (799×437)

格局类

Angular在验证输入或表单时的有效有否是已经提供了一些类,像是 (ng-valid,ng-invalid,ng-pristineandng-dirty).

你可以编辑自己喜欢的CSS . 你可以私有定制化这些类来实现特定的场景应用.
 

.ng-valid     { }
.ng-invalid   { }
.ng-pristine   { }
.ng-dirty     { }
 
/* really specific css rules applied by angular */
.ng-invalid-required     { }
.ng-invalid-minlength     { }
.ng-valid-max-length     { }

使用 ng-class 根据条件添加类

因为我们使用了 Bootstrap, 我们将就使用它们提供的类(has-error). 这样就能围绕我们的form-group获得漂亮的错误信息和颜色.

ng-class 允许我们基于一个表达式添加类. 在这种情况下,我们想要想我们的form-group添加一个 has-error 类,如果输入框的状态是$invalid或者不是pristine的话.

其工作的方式是 ng-class="{ 64e942f46d2e9af455b3f1c4acffb72e : 18f3084cc35bfabb3ad3e5c76b34d42c }". 更多的信息,请读一读 Angular ngClass 文档吧.

 

<!-- index.html -->
...
 
  <!-- NAME -->
  <div class="form-group" ng-class="{ 'has-error' : userForm.name.$invalid && !userForm.name.$pristine }">
    <label>Name</label>
    <input type="text" name="name" class="form-control" ng-model="user.name" required>
    <p ng-show="userForm.name.$invalid && !userForm.name.$pristine" class="help-block">You name is required.</p>
  </div>
   
  <!-- USERNAME -->
  <div class="form-group" ng-class="{ 'has-error' : userForm.username.$invalid && !userForm.username.$pristine }">
    <label>Username</label>
    <input type="text" name="username" class="form-control" ng-model="user.username" ng-minlength="3" ng-maxlength="8">
    <p ng-show="userForm.username.$error.minlength" class="help-block">Username is too short.</p>
    <p ng-show="userForm.username.$error.maxlength" class="help-block">Username is too long.</p>
  </div>
     
  <!-- EMAIL -->
  <div class="form-group" ng-class="{ 'has-error' : userForm.email.$invalid && !userForm.email.$pristine }">
    <label>Email</label>
    <input type="email" name="email" class="form-control" ng-model="user.email">
    <p ng-show="userForm.email.$invalid && !userForm.email.$pristine" class="help-block">Enter a valid email.</p>
  </div>
 
...

现在我们的表单就有了恰当的Bootstrap错误类.

201561995526100.png (770×449)

只在提交表单后显示错误信息

有时候不想在用户正在输入的时候显示错误信息. 当前错误信息会在用户输入表单时立即显示. 由于Angular很棒的数据绑定特性,这是可以发生的. 因为所有的事务都可以在一瞬间发生改变,这在表单验证时会有副作用.

对于你想要只在表单正要提交之后才显示错误消息的场景, 你就需要对上面的代码做一些小调整.

  •     你要去掉提交按钮上的ng-disabled,因为我们想要用户即使是在表单没有全部验证完的情况下也能点击提交.
  •     你要在表单已经被提交之后添加一个变量. 在你的 submitForm() 函数中, 只要加入 $scope.submitted = true 就行了;. 一旦表单被提交,它就会保存提交值为true的submitted变量.
  •     将错误规则从ng-class="{ 'has-error' : userForm.name.$invalid && !userForm.name.$pristine }" 调整为 ng-class="{ 'has-error' : userForm.name.$invalid && !userForm.name.$pristine && submitted }". 这就确保了错误消息只会在表单被提交时被显示出来. 你也许会需要为这个变量调整所有其它的 ng-class 和 ng-show.

现在,只有在submitted变量被设置为true时才会显示错误信息.
 
只有在输入框之外点击时才显示错误消息

只有在输入框之外点击时才显示错误消息(也被叫做失去焦点 blur) 这一需求比在提交时验证要复杂一点. 在失去焦点时验证表单需要一个custom指令. 这是一个可以让你操作DOM的指令.

我们正在写一篇文章专门讨论此话题。同时,还有其他的一些资源讨论了创建custom指令来处理失去焦点的情况:

  •     http://coding-issues.blogspot.in/2013/10/angularjs-blur-directive.html
  •     http://blog.ejci.net/2013/08/06/dealing-with-focus-and-blur-in-angularjs-directives/
  •     http://plnkr.co/edit/Xfr7X6JXPhY9lFL3hnOw?p=preview

全部完成

现在一旦我们正确填写了所有的信息,我们的表单提交按钮就能使用了. 一旦我们提交了表单,我们将会见到我们设置的弹出消息.

201561995546318.png (376×169)

用了几行我们就可以:

  •     进行输入框验证
  •     显示表单错误消息
  •     定制样式类
  •     自动禁止和启用表单
  •     定制规则

如你所见,我们使用了Angular内置的表单验证技术来创建一个客户端验证表单.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.