代码之家  ›  专栏  ›  技术社区  ›  Sahan Pasindu Nirmal

角6和离子3反应形式验证错误不显示

  •  -1
  • Sahan Pasindu Nirmal  · 技术社区  · 7 年前

    我在做一个项目,它使用的角度和离子的最新版本。我正在做一个注册页面。当表单输入无效时,我需要显示一些错误。我在我的项目中使用角度反应形式,但如果我检查页面上的错误,它不会显示。它只显示红色下划线,但我需要显示一些可读性错误

    enter image description here

    <ion-content padding>
      <ion-list class="items-middle" text-center>
        <!-- use the [formGroup] directive to tell Angular that we want to use the registrationForm as the "FormGroup" for this form: -->
        <form [formGroup]="registrationForm">
          <ion-item>
            <ion-label floating>Full Name</ion-label>
            <ion-input type="text" formControlName="userName"></ion-input>
            <div *ngIf="!registrationForm.controls['userName'].valid && registrationForm.controls['userName'].touched"> name is required</div>
          </ion-item>
          <!-- <ion-item>
                    <ion-label color="ligh-grey" floating>Email</ion-label>
                    <ion-input type="email" formControlName="email"></ion-input>
                </ion-item>
                <ion-item>
                    <ion-label color="ligh-grey" floating>Date of Birth</ion-label>
                    <ion-input type="text" formControlName="dob"></ion-input>
                </ion-item>
                <ion-item>
                    <ion-label color="ligh-grey" floating>Phone Number</ion-label>
                    <ion-input type="number" formControlName="phone" pattern="[0-9]*"></ion-input>
                </ion-item>
                <ion-item>
                    <ion-label color="ligh-grey" floating>Address</ion-label>
                    <ion-input type="text" formControlName="address"></ion-input>
                </ion-item>
                <ion-item class="job_status">
                    <ion-label color="ligh-grey" floating>Job Status (Position)</ion-label>
                    <ion-input type="text" formControlName="jobStatus"></ion-input>
                </ion-item>
                <ion-item>
                    <ion-label>Job Sector</ion-label>
                    <ion-select formControlName="jobSectore">
                        <ion-option value="f">Government</ion-option>
                        <ion-option value="m">Private</ion-option>
                    </ion-select>
                </ion-item>
                <input type="checkbox" formControlName="isTosRead"> -->
          <!-- We can check if our form is valid: -->
          <ion-buttons padding-top>
            <button ion-button full round type="submit" [disabled]="!registrationForm.valid">SIGNUP</button>
          </ion-buttons>
        </form>
        <pre> {{registrationForm.status}}</pre>
        <pre> {{registrationForm.value | json }}</pre>
      </ion-list>
    </ion-content>
    

    这是我的TS文件

    import { Component } from '@angular/core';
    import { IonicPage, NavController, NavParams } from 'ionic-angular';
    import { FormBuilder, FormGroup, Validators } from '@angular/forms';
    
    @IonicPage()
    @Component({
      selector: 'page-registration',
      templateUrl: 'registration.html',
    })
    export class RegistrationPage {
    
      registrationForm: FormGroup;
      userName: string;
    
      constructor(public navCtrl: NavController, public navParams: NavParams, private fb: FormBuilder) {
        // this.registrationForm = new FormGroup({
        //   userName: new FormControl('', [Validators.required, Validators.minLength(2), Validators.pattern('^[a-zA-Z]+$')]),
        //   email: new FormControl('', [Validators.required, Validators.email, Validators.minLength(4)]),
        //   dob: new FormControl('', [Validators.required, Validators.minLength(4)]),
        //   phone: new FormControl('', [Validators.required, Validators.minLength(9), Validators.maxLength(10)]),
        //   address: new FormControl('', [Validators.required, Validators.minLength(9), Validators.maxLength(255)]),
        //   jobStatus: new FormControl('', [Validators.required, Validators.minLength(2), Validators.maxLength(50)]),
        //   jobSectore: new FormControl('', [Validators.required]),
        //   isTosRead: new FormControl(false, [Validators.requiredTrue])
        // })
    
        this.registrationForm = this.fb.group({
          'userName': [null, Validators.compose([Validators.pattern('^[a-zA-Z]+$'), Validators.required])]
        });
      }
    }
    

    *ngIf

    3 回复  |  直到 7 年前
        1
  •  3
  •   Sajeetharan    7 年前

    试着改变条件如下,

    this.registrationForm = this.fb.group({
          userName: [
            null, Validators.compose([Validators.maxLength(30), Validators.pattern('^[a-zA-Z]+$'), Validators.required])
          ],
    

    编辑

    也可以按以下方式更改模板,

    <ion-item *ngIf="!registrationForm .controls.userName.valid && (registrationForm .controls.userName.dirty)"> <p>Please enter a valid name.</p> </ion-item> 
    
        2
  •  1
  •   SiddAjmera    7 年前

    div ion-item 标记如下:

    <ion-header>
      <ion-navbar>
        <ion-title>Home</ion-title>
      </ion-navbar>
    </ion-header>
    
    <ion-content padding>
      <ion-list class="items-middle" text-center>
        <form [formGroup]="registrationForm">
          <ion-item>
            <ion-label floating>Full Name</ion-label>
            <ion-input type="text" formControlName="userName"></ion-input>
          </ion-item>
          <div *ngIf="registrationForm.get('userName').touched && registrationForm.get('userName').invalid"> name is required</div>
          <ion-buttons padding-top>
            <button ion-button full round type="submit" [disabled]="!registrationForm.valid">SIGNUP</button>
          </ion-buttons>
        </form>
        <pre> {{registrationForm.status}}</pre>
        <pre> {{registrationForm.value | json }}</pre>
        <pre> {{registrationForm.get('userName').invalid | json }}</pre>
        <pre> {{registrationForm.get('userName').touched | json }}</pre>
      </ion-list>
    </ion-content>
    

    registrationForm.get('userName').touched && registrationForm.get('userName').invalid">

    Sample StackBlitz

        3
  •  1
  •   Shashikant Devani    7 年前

    <span> 用formControl标记如下:

    或添加 class="text-danger" <div> .

    .html文件 文件。

    显示器 required 错误消息

    <span class="text-danger" *ngIf="registrationForm.controls['userName'].hasError('required') && (registrationForm.controls['userName'].dirty || registrationForm.controls['userName'].touched)">Field is required</span>
    

    显示器 pattern

    <span class="text-danger" *ngIf="registrationForm.controls['userName'].hasError('pattern') && (registrationForm.controls['userName'].dirty || registrationForm.controls['userName'].touched)">Enter valid username.</span>
    

    ts公司

    this.registrationForm = this.fb.group({
      'userName': [null, Validators.compose([Validators.pattern('^[a-zA-Z]+$'), Validators.required])]
    });