Внедрение Angular службы в пользовательский Angular валидатор - PullRequest
0 голосов
/ 29 апреля 2020

Я создал специальный валидатор в Angular. Я использую сервис Angular в функции валидатора validateFund. Однако Angular предоставляет новый экземпляр сервиса; моя проверка всегда терпит неудачу, когда я пытаюсь проверить данные, так как экземпляр службы является новым и не содержит данных, которые присутствуют в другом экземпляре службы.

Вот валидатор:

export function validateFund(control: AbstractControl): ValidationErrors | null {
  const injector = Injector.create([{ provide: FundOrgService, deps: [] }]);

  const fundOrgService = injector.get(FundOrgService);
  console.log(fundOrgService.funds);
  const fund: Fund = control.value;
  const check = fundOrgService.getFundById(fund.portId);

  return fund && check ? null : { 'fund-validity': true };
}

1 Ответ

0 голосов
/ 05 мая 2020

Просто разобрался с ответом. Пользовательские валидаторы в Angular являются чистыми JavaScript функциями, вам нужно передать экземпляр службы Angular самим.

 this.portId.setValidators([
   Validators.required,
   validateFund(this.fundService),
 ]);
...