angular - 反应形式等同于密码验证
问题描述
注册按钮仅在 signupForm 有效时启用,但现在我有一个问题,即使密码和确认密码不匹配,该按钮仍处于启用状态
是我的 this.equalWithPasswordValidator。执行错误?
任何想法 ?谢谢。
#html代码
<button mat-raised-button class="full-width v-btn-lrg mt-0px" color="primary" type="submit"
[disabled]="signupForm.invalid">
{{labels.BUTTON.SETUP}}
</button>
#ts 代码
this.signupForm = this.fb.group({
confirmPassword: [
'',
[Validators.required, this.equalWithPasswordValidator.bind(this)],
],
password: [
'',
[
this.validatePasswordRequired,
this.validateMinimumPassword,
this.validatePasswordUpperCase,
this.validatePasswordLowerCase,
this.validatePasswordSpecialCharacter,
this.validateOneNumber,
],
],
});
}
equalWithPasswordValidator(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const equal = control.value === this.signupForm.get('password').value;
return equal ? { notEqual: { value: 'Passwords do not match' } } : null;
};
}
解决方案
您需要将验证器应用于 FormGroup,以便您可以访问这两个控件。这是创建验证器以比较两个字段的一种方法...
// component
form = new FormGroup({
password: new FormControl('', [ yourValidators... ]),
confirmPassword: new FormControl('', [ yourValidators... ])
}, {
validators: [ equivalentValidator('password', 'confirmPassword') ]
});
// equivalent.validator.ts
import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';
export const equivalentValidator = (firstControlName: string, secondControlName: string): ValidatorFn => {
return (control: AbstractControl): ValidationErrors | null => {
const firstControl = control.get(firstControlName);
const secondControl = control.get(secondControlName);
if (secondControl.value && secondControl.value !== firstControl.value) {
secondControl.setErrors({ notEqual: true });
}
return null;
};
};
在此示例中,如果第二个字段与第一个字段不匹配,我只会在第二个字段上设置错误。我没有在此处设置错误消息,而是设置了一个错误,notEqual
以便可以跨表单重复使用验证器。
推荐阅读
- python - 插入图像后标签的大小发生变化
- go - 将测试数据传递给嵌套结构
- python - 用于 One-Hot 编码的 Keras 自定义损失
- php - 成员列表 SQL 查询不显示共同好友、待批准好友、已屏蔽好友
- typescript - 使用 vite 和 typescript 编译器构建时,使用 three.js/react/vite 制作的项目会中断,但使用 npm run dev (开发服务器)可以正常工作
- javascript - 在 chart.js 中显示比标签更多的数据集
- php - Woocommerce:如果购物车包含此类别,则更改购物车总数
- oracle - INS-30014 无法检查指定的位置是否在 CFS 上
- php - 将网站从 WAMP 上传到在线时,需要重新安装 php 库,还是直接复制过来?
- spring-data-jpa - 一对多。在删除关联的所有者方面之前,我是否需要中断关联?