Сделать синхронный звонок в Angular 8 - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть поле ввода, которое я хочу проверить.

Я использую пользовательский валидатор для проверки действительности значения этого поля ввода.

В пользовательском валидаторе я делаювызов покоя для конечной точки со значением поля ввода, чтобы проверить, является ли введенное значение действительным.

Проблема заключается в том, что вызов getCatent httpClient работает асинхронно, к тому времени, когда результаты проверки возвращаются из остальныхAPI.Валидаторы поля ввода выходят, и проверка не работает согласно ожиданиям.

Есть ли способ сделать http-вызов синхронно.

мой код вызова httpClient внутри пользовательского валидатора:

labelNameValidators.ts:

import {FormControl } from '@angular/forms';

export function labelNameValidators(control: FormControl) {

  if(control.value!=null) {
    this.labelService.checklabelNameFormat(control.value)
    .subscribe(
      (data) => {

        if (data === 'true') {
          console.log('success', data);
          return  {'labelMsg': { 'message' : data}};
        }
        else {
          console.log('failure', data);
          return  {'labelMsg': { 'message' : data}};
        }
      },
      (err) => {
        console.log('error', err);
        return null;
      }
    )
  }
}

Label.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { environment } from 'src/environments/environment';

@Injectable({
  providedIn: 'root'
})

export class LabelService {

private nameFormatCheckApi = environment.nameFormatCheckApi;

  constructor( private http: HttpClient ) { }

  checklabelNameFormat(name: string){
    return this.http.get(this.nameFormatCheckApi + '?name='+name);
  }
}

1 Ответ

4 голосов
/ 24 сентября 2019

Вы можете использовать асинхронные валидаторы для вашего случая.

this.form = new FormGroup({
      fieldExample: new FormControl(
        null, Validators.required, asyncValidator())
});

здесь вы живая демонстрация с использованием асинхронных валидаторов с шаблонно-управляемыми формами и реактивными формами.

https://stackblitz.com/angular/bbdorarjxea

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...