typescript - Angular Enjekte Edilmiş Sağlayıcılarla Asenkron Form Doğrulaması


Reaktif bir formda, bir adın benzersiz olup olmadığını doğrulamak için bir servisi çağırması gereken özel bir async doğrulayıcım var.

Doğrulayıcılar saf fonksiyonlar olduğundan, bu çağrıları yapmak için HTTP gibi bir sağlayıcı eklemenin iyi bir yolu görünmüyor.

Şu anda sahip olduğum kod, servisi geçen bir fonksiyon döndürüyor ama bu biraz geçici bir çözüm gibi hissettiriyor...

export function nameValidator(platformService: PlatformService): ValidatorFn {
    return (control: FormControl): { [key: string]: any } => {
        return userService.getUnique(control.value)
    };
}

Benim sorum daha iyi bir yol var mı?

Cevap #1

Doğrulayıcılar, şablonlarda yönerge olarak kullanıldıklarında enjekte edilebilir yönerge sınıfları olabilirler.

Doğrudan FormControl veya FormBuilder içinde belirtildiklerinde işlev olmaları beklenir

DI'yi kullanabilmek için bunlar useFactory veya useClass sağlayıcıları olmalı ve bir bileşene enjekte edilmelidir:

@Injectable()
class NameValidator implements AsyncValidator {
  constructor(private userService: UserService) {}

  validate = (control: FormControl) => this.userService.getUnique(control.value);
}

...

new FormControl('', nameValidator.validate);

Dikkat edin, validate yöntemi bir geri arama olarak geçirilir ve ya bir ok fonksiyonu olmalı ya da bind ile sınıf örneğine bağlanmalıdır.

İlgili makaleler