javascript - 密码匹配的角度异步自定义验证器在我的登录表单中不起作用
问题描述
我正在尝试为我的表单制作一个自定义验证器,但我在返回时遇到了一些问题。
我的表格:
ngOnInit() {
this.signinForm = this.formBuilder.group({
userName:[null, [Validators.required, Validators.minLength(3)]],
userEmail:[null, [Validators.email,Validators.required], [this.noteValidators.emailCheckValidator(true)]],
userPassword: this.formBuilder.group({
password:[null, Validators.required],
repeat:[null, Validators.required]
}, {validator: this.noteValidators.checkMatchPassword()})
})}
我的验证器正在服务中。我有一个自定义验证器正在工作,我试图让另一个像这样:自定义验证器 OK:
public emailCheckValidator(exists:boolean) : AsyncValidatorFn {
return (control: AbstractControl): Observable<{[key: string]: any } | null> => {
return control.valueChanges.pipe(
debounceTime(500),
take(1),
switchMap( () => this.httpNote.checkEmail(control.value).pipe(
map( res => {
if(res == exists ){
return { checkEmail: res };
}
return null;
})
))
)
}
}
和有错误的验证器:
public checkMatchPassword():AsyncValidatorFn {
return (group:FormGroup): Observable<{[key:string]: any} | null> =>{
return group.valueChanges.pipe(
debounceTime(500),
distinctUntilChanged(),
take(1),
map( (res) => {
console.log(res);
if(group.get('password').value === group.get('repeat').value) {
return null;
}
return { passwordMatch: false };
}
)
)//pipe
}
}
是否有另一种方法来编写没有 HTTP 请求的自定义验证器>
我唯一的条件是将所有验证者组织成一个服务。
解决方案
推荐阅读
- xcuitest - 在 XCUIElement 中使用正则表达式
- android - Android 取消来自后端的通知
- rust - 有没有办法设置 Clap 或其他 arg 库以接受普通的“-”或“+”,以便我可以获得没有命名标志的参数组?
- python - 如果现在时间在时间数组中,则 Python 执行任务
- sql - 在python中执行时简单SQL出错
- mysql - 如何在mysql中添加随机限制
- java - 如何为发布请求编写模拟测试
- javascript - 如何使用一行 .js 代码触发文件下载(不需要用户与 HTML 交互)
- scala - 使用默认值从 Map 列获取值
- javascript - 使用 JavaScript 更改模糊滤镜