gpt4 book ai didi

Angular 2匹配表单中的密码

转载 作者:太空狗 更新时间:2023-10-29 18:19:32 25 4
gpt4 key购买 nike

我知道其他时候也有人以类似的形式问过这个问题,但我的情况有点不同;让我解释一下:

我有一个重置密码表单,有 3 个字段(旧密码、新密码、确认密码)。当然,我需要检查提交的密码是否等于提交的确认密码,我想在单击提交之前执行此操作。我定义了如下形式(在 component.ts 中)

this.form = fb.group({
// define your control in you form
oldpassword: ['', Validators.required],
password: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(10)]],
confirmPassword: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(10)]]
}, {
validator: PasswordValidation.MatchPassword // your validation method
});

export class PasswordValidation {

static MatchPassword(AC: AbstractControl) {
const password = AC.get('password').value; // to get value in input tag
const confirmPassword = AC.get('confirmPassword').value; // to get value in input tag
if (password !== confirmPassword) {
AC.get('confirmPassword').setErrors({MatchPassword: true})
} else {
return null
}
}
}

这就是问题所在,如果我在编译“新密码”之前更改“确认密码字段”,则表单无效。换句话说,如果我尊重字段的垂直顺序,一切都可以,但如果我以不同的顺序编译字段,那么表单仍然无效。

这是 html 代码:(如您所见,它有点令人困惑,因为我有其他 UX 约束 ehich 对应于用户可能的交互)

<form [formGroup]="form" novalidate (ngSubmit)="modal.open()">
<div class="form-group">
<label for="oldpassword">Inserisci vecchia password</label>
<input type="password" id="oldpassword" class="form-control" formControlName="oldpassword">
<div
*ngIf="form.controls['oldpassword'].hasError('required') && form.controls['oldpassword'].touched"
class="alert alert-danger">
Campo obbligatorio
</div>
</div>
<div class="form-group">
<label for="password">Inserisci nuova password</label>
<input type="password" id="password" class="form-control" formControlName="password">
<div *ngIf="form.controls['password'].hasError('required') && form.controls['password'].touched"
class="alert alert-danger">
Campo obbligatorio
</div>
<div *ngIf="form.controls['password'].hasError('minlength') && form.controls['password'].touched"
class="alert alert-danger">
Lunghezza minima: 4 caratteri.
</div>
</div>
<div class="form-group">
<label for="confirmPassword">Ripeti nuova password</label>
<input type="password" class="form-control" id="confirmPassword" formControlName="confirmPassword">
<div class="alert alert-danger"
*ngIf="form.errors?.MatchPassword || (form.controls['confirmPassword'].hasError('required') && form.controls['confirmPassword'].touched)">
Le password non corrispondono
</div>
</div>
<div *ngIf="!this.state.controlloIn; else elseBlock">
<button type="submit" class="btn btn-primary btn-update" [disabled]="!form.valid || this.controlloInvia">
Invia Richiesta
</button>
</div>
<ng-template #elseBlock>
<button type="submit" class="btn btn-primary btn-update" [disabled]="true">
Invia Richiesta
</button>
</ng-template>
</form>

我不是 Angular 专家,所以如果你能给我建议其他最佳实践,我会非常高兴。感谢大家

最佳答案

您直接在确认字段中设置错误。如果您不再触摸该字段,则会在其上设置错误并且永远不会被删除。 Angular 仅在字段已被编辑时运行验证器,因为您可以合理地认为如果字段被标记为错误且未被编辑,它仍处于错误状态。

我建议您将此错误直接放在 FormGroup 上:

static MatchPassword(AC: AbstractControl) {
const password = AC.get('password').value; // to get value in input tag
const confirmPassword = AC.get('confirmPassword').value; // to get value in input tag
if (password !== confirmPassword) {
return {MatchPassword: true};
} else {
return null
}
}
<div class="alert alert-danger"
*ngIf="form.errors?.MatchPassword || (form.controls['confirmPassword'].hasError('required') && form.controls['confirmPassword'].touched)">
Le password non corrispondono
</div>

关于Angular 2匹配表单中的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47135277/

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