Как вернуть результат из Observable в пользовательский канал с Angular 8? - PullRequest
1 голос
/ 18 января 2020

Я работаю над проектом Angular 8, и мне нужно вернуть строку из вызываемой службы, которая возвращает Observable, и весь этот персонал находится в специальном канале. Вот мой код:

    export class ContractTypePipe implements PipeTransform {
    result;

    constructor(private referentielService: ReferentialService){}

    transform(element: number) {
      if (!element) {
        return null;
      }

      this.referentielService.getContractTypes().subscribe(res => {
        const data = res.find(ct => ct.id === element);
        this.result =  data.abbr + ' - ' + data.fr;
        return this.result;
      });
  }
}

, а в HTML я использую этот код {{customType | toContract}} проблема в том, что результат всегда пуст. Как я могу решить это?

1 Ответ

0 голосов
/ 18 января 2020

Как заявил JB Nizet: Ваша труба не должна быть той, которая получает типы контрактов от сервиса. Это должно быть сделано компонентом. Ваш канал должен иметь дело только с форматированием контракта

export class ContractTypePipe implements PipeTransform {
    result;

    constructor(private referentielService: ReferentialService){}

    transform(element: number) {
      if (!element) {
        return null;
      }

     yourmethod(): void {
      this.referentielService.getContractTypes().subscribe
     (res => this.result = res);

      }
  }

Ваш класс ReferentielService должен выглядеть примерно так:

@Injectable({
  providedIn: 'root'
})
export class ReferentielService {

getContractTypes(): Observable<any[]> {
  return this.http.get<any[]>(this.APIUrl)
    .pipe(
      tap(_ => this.log('fetched data')),
      catchError(this.handleError<any[]>)
    );
}
}
...