Angular 反应式表单验证的奇怪错误
Strange errors with Angular Reactive Forms Validation
我正在使用 Angular 7 在我的产品页面组件表单上测试一个简单的登录功能,但我遇到了这种奇怪的行为。如果存在错误,我会尝试显示适当的验证消息,比如如果它不是有效的电子邮件,则应该显示“必须是有效的电子邮件”消息,如果该字段是留空,“email is required”,应该显示错误,当您开始输入时,required 消息消失,只有有效的电子邮件错误消息显示。这是我的代码。
Addproduct.component.html
所以现在,如果错误存在但它不起作用,我将尝试呈现跨度消息。
<form [formGroup]="loginForm" class="login-container" (ngSubmit)="login()">
<p>
<input class="form-control" type="email" placeholder="Email here" formControlName="email">
<span *ngIf="f.email.errors.required">email is required</span>
<span *ngIf="f.email.errors.email">must be a valid email</span>
</p>
<p>
<input class="form-control" type="password" placeholder="Password here" formControlName="password">
<span *ngIf="f.password.errors.required">Password is required</span>
</p>
<p><button type="submit" class="btn btn-md btn-primary">Submit</button></p>
</form>
Addproduct.component.ts
这是控制器,我尝试使用验证规则的简称,但仍然无济于事。
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-addproduct',
templateUrl: './addproduct.component.html',
styleUrls: ['./addproduct.component.css']
})
export class AddproductComponent implements OnInit {
loginForm:FormGroup;
isSubmitted:boolean = false;
constructor(
private router:Router,
private fb:FormBuilder
){}
ngOnInit() {
this.loginForm = this.fb.group({
email : ['', [Validators.required,Validators.email]],
password : ['', [Validators.required,Validators.min(6)]]
});
}
get f(){
return this.loginForm.controls;
}
}
我也把验证脚本改成了这个,但还是没用
ngOnInit() {
this.loginForm = this.fb.group({
email : new FormControl('', [Validators.required,Validators.email]),
password : new FormControl('', [Validators.required,Validators.min(6)])
});
}
我收到了这个错误
您正在检查可能不存在错误的地方是否存在错误。
你想要这样的东西:
f.email.errors?.required
甚至:
f.email?.errors?.required
对密码字段和首次调用时 属性 可能不存在的其他任何地方执行相同的操作。
您也可以使用
<span *ngIf="loginForm.hasError('required', ['password'])">Password is required</span>
在我看来这要容易得多。
我正在使用 Angular 7 在我的产品页面组件表单上测试一个简单的登录功能,但我遇到了这种奇怪的行为。如果存在错误,我会尝试显示适当的验证消息,比如如果它不是有效的电子邮件,则应该显示“必须是有效的电子邮件”消息,如果该字段是留空,“email is required”,应该显示错误,当您开始输入时,required 消息消失,只有有效的电子邮件错误消息显示。这是我的代码。
Addproduct.component.html
所以现在,如果错误存在但它不起作用,我将尝试呈现跨度消息。
<form [formGroup]="loginForm" class="login-container" (ngSubmit)="login()">
<p>
<input class="form-control" type="email" placeholder="Email here" formControlName="email">
<span *ngIf="f.email.errors.required">email is required</span>
<span *ngIf="f.email.errors.email">must be a valid email</span>
</p>
<p>
<input class="form-control" type="password" placeholder="Password here" formControlName="password">
<span *ngIf="f.password.errors.required">Password is required</span>
</p>
<p><button type="submit" class="btn btn-md btn-primary">Submit</button></p>
</form>
Addproduct.component.ts
这是控制器,我尝试使用验证规则的简称,但仍然无济于事。
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-addproduct',
templateUrl: './addproduct.component.html',
styleUrls: ['./addproduct.component.css']
})
export class AddproductComponent implements OnInit {
loginForm:FormGroup;
isSubmitted:boolean = false;
constructor(
private router:Router,
private fb:FormBuilder
){}
ngOnInit() {
this.loginForm = this.fb.group({
email : ['', [Validators.required,Validators.email]],
password : ['', [Validators.required,Validators.min(6)]]
});
}
get f(){
return this.loginForm.controls;
}
}
我也把验证脚本改成了这个,但还是没用
ngOnInit() {
this.loginForm = this.fb.group({
email : new FormControl('', [Validators.required,Validators.email]),
password : new FormControl('', [Validators.required,Validators.min(6)])
});
}
我收到了这个错误
您正在检查可能不存在错误的地方是否存在错误。
你想要这样的东西:
f.email.errors?.required
甚至:
f.email?.errors?.required
对密码字段和首次调用时 属性 可能不存在的其他任何地方执行相同的操作。
您也可以使用
<span *ngIf="loginForm.hasError('required', ['password'])">Password is required</span>
在我看来这要容易得多。