我正在研究一个使用Angular和Ionic的最新版本的项目。我正在注册页面上。当表单输入无效时,我需要显示一些错误。我在项目中使用Angular Reactive表单,但是如果我在页面上检查错误,则不会显示该错误。它只显示红色下划线,但我需要显示一些可读错误
这是我的查看代码
<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
条件,控制台没有显示任何错误。
答案 0 :(得分:3)
尝试如下更改条件,
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>
答案 1 :(得分:1)
使用您的formControl添加<span>
标签:
或在当前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])]
});
答案 2 :(得分:1)
您必须像这样在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">