Saya mencoba melakukan validasi async dalam bentuk reaktif. Saya memiliki tombol kirim yang harus dinonaktifkan setiap kali saya memberikan masukan baru. Tetapi setiap kali saya memberikan email duplikat sebagai input, itu akan mencari ketersediaan pada saat itu formulir akan valid untuk beberapa waktu yang membuat tombol kirim dapat diklik.

Saya ingin tombol kirim dinonaktifkan saat mencari ketersediaan.

validateEmailAvailability(): AsyncValidatorFn {
    return (control: AbstractControl): Observable<any> => {
        return control.valueChanges.pipe(
            debounceTime(500),
            distinctUntilChanged(),
            take(1),
            switchMap(_ => this
                .checkEmailExists(control.value)
                .pipe(map(isExists => (isExists ? ({ isExists: true}) : null)))
            ),
        )
    }
}
0
Abdul Mohaimin 3 September 2020, 15:31

1 menjawab

Jawaban Terbaik

Mungkin Anda bisa menggunakan kombinasi operator rxJs Ketuk dan Selesaikan: https://rxjs-dev.firebaseapp.com/api/operators/tap
https://rxjs-dev.firebaseapp.com/api/operators/finalize

validateEmailAvailability(): AsyncValidatorFn {
        return (control: AbstractControl):Observable<any> => {
            return control.valueChanges.pipe(
                debounceTime(500),
                tap(() => this.disableSubmit = true),
                distinctUntilChanged(),
                take(1),
                switchMap(_ => this.checkEmailExists(control.value)
                    .pipe(
                        map(isExists => (isExists ? ({ isExists: true}) : null)),
                        finalize(() => this.disableSumbit = false)
                    )),
            )
        }
    }
2
Tim Lepage 4 September 2020, 07:09