gpt4 book ai didi

forms - 如何强制 Angular 2 重新检查验证器?

转载 作者:行者123 更新时间:2023-12-01 23:40:35 34 4
gpt4 key购买 nike

我有一个用 Angular 2 响应式(Reactive)(数据驱动)模板编写的简单登录表单。它运行良好,但是当我刷新页面并且浏览器填写电子邮件+密码(自动完成)时,我的表单的有效属性似乎是错误的。

但是,当我在表单无效的情况下按任意键或单击页面中的任意位置时,angular 会更新某些状态(我猜)并且我的表单变得有效。

我怎样才能触发那个状态?我怎么能说 Angular “嘿,再次检查我的表格。”?我无法触发自己的验证脚本,因为某些验证消息是警报。如果我这样做,当用户打开此页面时,他/她将看到这些警报。

我记得,我使用 trigger('input') 技巧来更新 ng-model。

最佳答案

updateValueAndValidity()就是你要找的。文档在这里:AbstractControl .它可以强制重新计算控件的值和验证状态。

这是一个演示:

form.component.ts

export class FormComponent implements OnInit {
myform: FormGroup;

// explicit validation of each field
emailValid: AbstractControl;
passwordValid: AbstractControl;

constructor(private fb: FormBuilder) {
this.myform = fb.group({
'email': ['', Validators.required],
'password': ['', Validators.required],
});

this.emailValid = this.myform.controls['email'];
this.passwordValid = this.myform.controls['password'];
}

ngOnInit() {
this.myform.get('email').valueChanges.subscribe(()=>forceValidAgain());
this.myform.get('password').valueChanges.subscribe(()=>forceValidAgain());
}

forceValidAgain(){
this.emailValid.updateValueAndValidity();
this.passwordValid.updateValueAndValidity();
}
}

表单.组件.html

<form [formGroup]="myform" (ngSubmit)="onSubmit(myform.value)">
<div class="form-group">
<label for="email">Email</label>
<input type="email"
class="form-control"
id="email"
name="email"
[formControl]="myform.controls['email']"
[ngClass]="{'is-invalid': !emailValid.valid && emailValid.touched }">
<div
class="invalid-feedback"
*ngIf="emailValid.hasError('required')">
This field is required
</div>
</div>

<div class="form-group">
<label for="password">Password</label>
<input type="password"
class="form-control"
id="password"
name="password"
[formControl]="myform.controls['password']"
[ngClass]="{'is-invalid': !passwordValid.valid && passwordValid.touched}">
<div
class="invalid-feedback"
*ngIf="passwordValid.hasError('required')">
This field is required
</div>
</div>
</form>

关于forms - 如何强制 Angular 2 重新检查验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159163/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com