2

В Angular 2 Я пытаюсь создать свой собственный валидатор.Пользовательский валидатор Angular2 с зависимостью

Я создал свой собственный класс CustomValidators, который реализует интерфейс валидатора.

import { FormControl } from "@angular/forms"; 
import { MyhttpService } from "./myhttp.service"; 
import { Response } from "@angular/http"; 
import { Injectable, Directive } from '@angular/core'; 


@Injectable() 
export class CustomValidators{ 

constructor(private _http : MyhttpService){ 

} 

public api(c : FormControl) 
{ 
    // Run 
    this._http.get("/expenses/email?email=" + c.value).subscribe((res:Response) => { 
     if(res.status === 200){ 
      // email exists 
      return null; 
     } else { 
      return {"email" : true} 
     } 
    }); 
} 

Если я делаю api статическим методом, то я могу успешно использовать класс.

this._formDetails = fb.group({ 
    "managerEmail" : ["", [Validators.required, CustomValidators.api] ] 
}); 

Однако, конечно, это статический метод, поэтому я не имею доступ к какому-либо из значений конструктора, как конструктор не был запущен.

Поэтому я не могу найти способ реализации пользовательского валидатора с зависимостями, должен быть способ.

Я попробовал листинг CustomValidators как поставщика, поэтому мой класс получает экземпляр объекта класса.

Свойство 'апи' не существует на типе 'TYPEOF CustomValidators'

Am I обеспечивая класс в правильном пути? Почему метод не существует?

+0

У меня такая же проблема, как вы нашли решение? –

ответ

0

Попробуйте это:

this._formDetails = fb.group({ 
    "managerEmail" : ["", Validators.required, CustomValidators.api] 
}); 

Validators.required является синхронным валидатор, но ваш CustomValidators.api асинхронный валидатор.

Per the official documentation, каждое управление формой должно быть задано с помощью состояния, синхронного валидатора (-ов), затем асинхронного валидатора (-ов).

+0

Ваш ответ содержит ошибку: 'this._formDetails = fb.group ({ "managerEmail": [ "", Validators.required], [CustomValidators.api] });' является то, что вы имели в виду. Но это не ответ на его вопрос. –