Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于密码匹配的Angular异步自定义验证器在我的登录表单中不起作用_Javascript_Angular_Typescript_Rxjs - Fatal编程技术网

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
操作符,它将在第一次通知后完成源观测。之后,所有的值更改都被忽略,不需要是异步验证器。我只想组织服务中的所有验证器。老实说,我对异步验证器和可观察对象的概念仍然有些困惑,但我正在研究所有这些。