Maison > interface Web > js tutoriel > Explication détaillée des étapes de vérification du formulaire dans angulaire4

Explication détaillée des étapes de vérification du formulaire dans angulaire4

php中世界最好的语言
Libérer: 2018-04-17 14:25:30
original
1677 Les gens l'ont consulté

Cette fois, je vais vous apporter une explication détaillée des étapes de vérification du formulaire dans angulaire4. Quelles sont les précautions à propos de la vérification du formulaire angulaire4. Voici un cas pratique, jetons un coup d'oeil.

Ce chapitre présente la création de formulaires réactifs et la vérification des valeurs d'entrée du formulaire. Nous ignorerons les modèles de formulaires.

1. Étapes pour utiliser les formulaires réactifs

1. Introduisez ReactiveFormsModule
dans le module (généralement app.module.ts) 2. Utilisez des formulaires réactifs

import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';
export class ReactiveFormComponent implements OnInit {
  private myForm: FormGroup;
  constructor(private fb: FormBuilder) {
    this.createForm();
  }
  ngOnInit() {
  }
  // 创建表单元素
  createForm() {
    this.myForm = this.fb.group({
      username: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(6)]],
      mobile: ['', [Validators.required]],
      password: this.fb.group({
        pass1: [''],
        pass2: ['']
      })
    });
  }
  // 提交表单函数
  postDate() {
    /**
     * valid:是否有效
     * invalid:无效
     * dirty:脏
     * status:状态
     * errors:显示错误
     */
    if(this.myForm.valid){
      console.log(this.myForm.value);
    }
  }
}
Copier après la connexion

dans le fichier ts du composant 3. Utilisez

<form [formGroup]="myForm" (ngSubmit)="postDate()">
  <p class="form-group">
    <label for="username">用户名:</label>
    <input type="text" placeholder="请输入用户名" class="form-control" id="username" formControlName="username" />
  </p>
  <p class="form-group">
    <label for="mobile">手机号码:</label>
    <input type="text" placeholder="请输入手机号码" class="form-control" id="mobile" formControlName="mobile"/>
  </p>
  <p formGroupName="password" style="border:none;">
    <p class="form-group">
      <label>密码:</label>
      <input type="password" class="form-control" placeholder="请输入密码" formControlName="pass1" />
    </p>
    <p class="form-group">
      <label>确认密码:</label>
      <input type="password" class="form-control" placeholder="请再次输入密码" formControlName="pass2" />
    </p>
  </p>
  <p class="form-group">
    <input type="submit" value="提交" class="btn btn-warning" [disabled]="!myForm.valid" />
  </p>
</form>
Copier après la connexion

dans la page html du composant 2. Utilisez des formulaires pour vérifier les données

1. Angular est livré avec trois validations de formulaire courantes : obligatoire, minLength, maxLength
dans les validateurs 2. Validateur de formulaire personnalisé (en fait juste une fonction, paramètres de la fonction est la ligne actuelle qui doit être vérifiée , et renvoie un objet arbitraire)

**格式**
export function fnName(control:FormControl|FormGroup):any{
}
Copier après la connexion

3. Trois valeurs peuvent être écrites dans le champ du formulaire réactif. La première est renvoyée à la page, le deuxième paramètre est le validateur (peut être un groupe) et le troisième paramètre est la vérification asynchrone (jugement commun du téléphone mobile). numéro, le nom d'utilisateur est enregistré à plusieurs reprises)

3. Étapes pour personnaliser une méthode de vérification

1. Écrivez un fichier séparé pour le validateur nécessaire au projet

import { FormControl, FormGroup } from '@angular/forms';
/**
 * 自定义验证器(其实就是一个函数,一个返回任意对象的函数)
 * 传递的参数是当前需要验证的表单的FormControl
 * 通过传递的参数获取当前表单输入的值
 */
export function mobileValidator(control: FormControl): any {
  console.dir(control);
  // 获取到输入框的值
  const val = control.value;
  // 手机号码正则
  const mobieReg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
  const result = mobieReg.test(val);
  return result ? null : { mobile: { info: '手机号码格式不正确' } };
}
Copier après la connexion

2. Utilisez votre propre validateur défini

createForm() {
  this.myForm = this.fb.group({
    username: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(6)]],
    mobile: ['', [Validators.required, mobileValidator]],
    password: this.fb.group({
      pass1: [''],
      pass2: ['']
    })
  });
}
Copier après la connexion

3. Définir la vérification d'un groupe de chiffrement

// 定义一个密码组的验证方法
export function passValidator(controlGroup: FormGroup): any {
  // 获取密码输入框的值
  const pass1 = controlGroup.get('pass1').value as FormControl;
  const pass2 = controlGroup.get('pass2').value as FormControl;
  console.log('你输入的值:', pass1, pass2);
  const isEqule: boolean = (pass1 === pass2);
  return isEqule ? null : { passValidator: { info: '两次密码不一致' } };
}
Copier après la connexion

4. Utilisez

createForm() {
  this.myForm = this.fb.group({
    username: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(6)]],
    mobile: ['', [Validators.required, mobileValidator]],
    password: this.fb.group({
      pass1: [''],
      pass2: ['']
    }, {validator: passValidator})
  });
}
Copier après la connexion

4. Concernant l'affichage des erreurs sur la page front-end

1. Erreur d'affichage de la page

<p class="form-group">
  <label for="username">用户名:</label>
  <input type="text" placeholder="请输入用户名" class="form-control" id="username" formControlName="username" />
  <!-- 当输入框没有访问的时候或者合法的时候不显示 -->
  <p [hidden]="myForm.get(&#39;username&#39;).valid || myForm.get(&#39;username&#39;).untouched">
    <p [hidden]="!myForm.hasError(&#39;required&#39;,&#39;username&#39;)">用户名必填的</p>
    <p [hidden]="!myForm.hasError(&#39;minlength&#39;,&#39;username&#39;)">用户名长度过短</p>
    <p [hidden]="!myForm.hasError(&#39;maxlength&#39;,&#39;username&#39;)">用户名长度太长</p>
  </p>
</p>
<p class="form-group">
  <label for="mobile">手机号码:</label>
  <input type="text" placeholder="请输入手机号码" class="form-control" id="mobile" formControlName="mobile"/>
  <p [hidden]="myForm.get(&#39;mobile&#39;).valid || myForm.get(&#39;mobile&#39;).untouched">
    <p [hidden]="!myForm.hasError(&#39;mobile&#39;, &#39;mobile&#39;)">{{myForm.getError('mobile', 'mobile')?.info}}</p>
  </p>
</p>
<p formGroupName="password" style="border:none;">
  <p class="form-group">
    <label>密码:</label>
    <input type="password" class="form-control" placeholder="请输入密码" formControlName="pass1" />
  </p>
  <p class="form-group">
    <label>确认密码:</label>
    <input type="password" class="form-control" placeholder="请再次输入密码" formControlName="pass2" />
  </p>
  <!-- 对于group可以不在外面加一层判断 -->
  <p>
    <p [hidden]="!myForm.hasError(&#39;passValidator&#39;,&#39;password&#39;)">
      {{myForm.getError('passValidator','password')?.info}}
    </p>
  </p>
</p>
Copier après la connexion

2. Définir les fichiers de style

.ng-touched:not(form),.ng-invalid:not(form) {
  border: 1px solid #f00;
}
.ng-valid:not(form),.ng-untouched:not(form) {
  border: 1px solid #ddd;
}
p{
  color:#f00;
}
Copier après la connexion

5. Erreur d'affichage de la classe personnalisée

1. Écrivez

dans la zone de saisie Indique que le champ n'est pas valide et a été touché. Ajoutez cette classe="erreur"

 [class.error]="myForm.get('username').invalid && myForm.get('username').touched"
Copier après la connexion

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez faire attention. vers d'autres articles connexes sur le site Web PHP chinois !

Lecture recommandée :

Comment utiliser l'attribut calculé dans Vue

Explication détaillée de l'utilisation de get ajax natif et méthodes de publication

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal