angular - 在 Angular Reactive Form - FormBuilder 中检查相同的密码并确认密码
问题描述
我正在尝试使用 .NET Core 创建 Angular 5 注册表单。
我正在检查注册表中的密码和重新输入的密码是否相同。我正在使用FormBuilder作为表单。
但是检查 password1 和 password2 总是失败。我也试过了===
。
if (this.RegistrationForm.valid) {
if (this.RegistrationForm.get('password1') == this.RegistrationForm.get('password2')) {
this.MyService.Register(this.RegistrationForm.value).subscribe((data) => {}, error => this.errorMessage = error)
} else {
this.errorMessage = "cdscs";
}
}
constructor(private fb: FormBuilder, private MyService: RoadSignService) {
this.RegistrationForm = this.fb.group({
Id: 0,
name: ['', [Validators.required]],
email: ['', [Validators.required]],
gender: ['', [Validators.required]],
department: ['', [Validators.required]],
address: ['', [Validators.required]],
password1: ['', [Validators.required]],
password2: ['', [Validators.required]]
})
}
解决方案
我会将其作为整个 FormGroup 的验证器来处理,而不是提交表单,然后进行检查。
当您定义 FormGroup 时,您可以为整个组添加一个验证器,让您可以访问所有控件/值,如下所示:
validatePasswords(formGroup: FormGroup): any {
const password = formGroup.controls['password'];
const confirmPassword = formGroup.controls['confirmPassword'];
// don't validate
if (password.pristine || confirmPassword.pristine) {
return null;
}
formGroup.markAsTouched();
if (password.value === confirmPassword.value) {
return null;
}
return confirmPassword.setErrors({
notEqual: true
});
}
form = this.formBuilder.group({
. . .,
password: [
'', [
Validators.required,
Validators.pattern(regexPatterns.password),
]
],
confirmPassword: [
'', [
Validators.required,
Validators.pattern(regexPatterns.password)
]
]
}, {
validator: this.validatePasswords
});
在这个例子中,regexPatterns.password
只是一个 RegExp 对象的共享导入,表达式为:/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=*]).*/
现在,您可以在提交表单并调用任何其他逻辑、API 调用或任何昂贵的操作之前向用户显示这两个字段是否匹配。
推荐阅读
- ios - Firebase RemoteConfig A/B 测试——手动放置用户
- list - 千里马:打乱列表中元素的顺序?
- node.js - 将实例加载到具有关联的数据库(sequelize,postgres)时出现问题
- file-upload - 当分辨率高于 VGA 时,ESP-32 CAM 返回带有灰色带的图片
- angular - Angular 如何在 html 中使用 translate i18n 键作为函数参数
- react-native - 如何确定哪些 react-native-maps 标记在地图中可见
- javascript - 如何在 iOS Safari 中获取当前屏幕方向?
- selenium - 从Github下载的pycharm项目不安装pycharm可以运行吗?
- xml - 在 Hive 中生成 XML 输出
- arduino - 我插入我的arduino,我的黄灯没有打开