Я использую angular4-material-table. там я попытался добавить пользовательскую проверку ввода, я создал отдельную службу валидатора, там я вызвал пользовательскую функцию для проверки моего API на основе результата API, он выбрасывает ввод правильно или нет.
вот мой код, может кто-нибудь подсказать мне, что ошибка, которую я сделал,
import { Injectable } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { ValidatorService } from 'angular4-material-table';
import { AbstractControl } from '@angular/forms';
import { ApiCallService } from 'api.service';
@Injectable()
export class MatTableValidatorService implements ValidatorService {
constructor( private api_call: ApiCallService) {
}
getRowValidator(): FormGroup {
return new FormGroup({
'name': new FormControl(null, [Validators.required, this.nameValidator]),
});
}
nameValidator(control: AbstractControl): { [key: string]: boolean } | null {
this.api_call
.api_function(parameter)
.subscribe(data => {
const arrayVal = data.response;
if(arrayVal.length > 0)
{
return {'dnsCheck': true}
}
return null;
});
return null;
}
}
эта возвращает ошибку: невозможно прочитать свойство api_call, даже если я объявил его в конструкторе
и другим способом:
public nameValidator = (control: AbstractControl) => {
this.api_call
.api_function(parameter)
.subscribe(data => {
const arrayVal = data.response;
if(arrayVal.length > 0)
{
return {'dnsCheck': true}
}
return null;
});
};
this способ работает, но даже если вход действителен или нет, он всегда выдает ошибку. Я проверил вывод с консоли, кажется, получение из API отлично сделано. Может ли кто-нибудь помочь мне в чем моя ошибка. Заранее спасибо.
Пример стекаблица можно увидеть здесь.