Javascript 用于密码匹配的Angular异步自定义验证器在我的登录表单中不起作用
我正在尝试为我的表单创建一个自定义验证器,但是我在返回时遇到了一些问题 我的表格:Javascript 用于密码匹配的Angular异步自定义验证器在我的登录表单中不起作用,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我正在尝试为我的表单创建一个自定义验证器,但是我在返回时遇到了一些问题 我的表格: ngOnInit() { this.signinForm = this.formBuilder.group({ userName:[null, [Validators.required, Validators.minLength(3)]], userEmail:[null, [Validators.email,Validators.required], [this.noteValidators.email
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()})
})}
我的验证器正在使用中。
我有一个自定义验证器正在工作,我试图使另一个如下:
自定义验证程序正常:
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;
})
))
)
}
}
公共emailCheckValidator(存在:布尔):AsyncValidator fn{
返回(控件:AbstractControl):可观察=>{
返回控制.valueChanges.pipe(
去BounceTime(500),
以(1)为例,
switchMap(()=>this.httpNote.checkEmail(control.value).pipe(
地图(res=>{
如果(res==存在){
返回{checkEmail:res};
}
返回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
}
}
public checkMatchPassword():asyncValidator fn{
返回(组:FormGroup):可观察=>{
返回组.valueChanges.pipe(
去BounceTime(500),
distinctUntilChanged(),
以(1)为例,
地图((分辨率)=>{
控制台日志(res);
if(group.get('password')。值===group.get('repeat')。值){
返回null;
}
返回{passwordMatch:false};
}
)
)//烟斗
}
}
有没有其他方法可以在没有HTTP请求的情况下编写自定义验证程序>
我唯一的条件是将所有验证器组织到一个服务中。这是否需要一个异步验证器?对我来说似乎没什么意义?这里的问题可能是
take
操作符,它将在第一次通知后完成源观测。之后,所有的值更改都被忽略,不需要是异步验证器。我只想组织服务中的所有验证器。老实说,我对异步验证器和可观察对象的概念仍有一些混淆,但我正在研究所有这些。这是否是需要异步验证器的原因?对我来说似乎没什么意义?这里的问题可能是take
操作符,它将在第一次通知后完成源观测。之后,所有的值更改都被忽略,不需要是异步验证器。我只想组织服务中的所有验证器。老实说,我对异步验证器和可观察对象的概念仍然有些困惑,但我正在研究所有这些。