Как внедрить сервисы в канал и вернуть строковое значение? - PullRequest
0 голосов
/ 27 марта 2019

Как вернуть только одно значение, когда службы внедряются в каналы?

Это код html-файла, где я использую канал.

 {{model.template[i].locale | locale }}

Locale.pipe.TS файл.когда я утешаю результат, он печатает только одно значение. bur ничего не возвращает в html-файле.

import { Pipe, PipeTransform } from '@angular/core';
import { UserService } from '../../core/@services/user.service'

@Pipe({ name: 'locale' })
export class Locale implements PipeTransform {
 returnresponse: string;
 constructor(private UserService: UserService) { }
 transform(value: any) {
  this.UserService.lookupapi_code(value).subscribe(result => {
  console.log(result)
  //this.returnresponse = result;
   return result;
 });
// return this.returnresponse;
 }
}

файл User.service.ts, который возвращает только одно значение отсюда

public lookupapi_code(languagecode): Observable<any> {
return this.http.get(AppSettings.lookupapi).map((response: Response) => {

  var Jstring = JSON.stringify(response);
  var Jarray = JSON.parse(Jstring);
  for (var i = 0; i < Jarray.length; i++) {
    if (Jarray[i].locale == languagecode) {
      return Jarray[i].displayName;
   }
  }
 });
}

1 Ответ

2 голосов
/ 27 марта 2019

Возврат наблюдаемого из "локали" трубы и цепи с асинхронной трубой

@Pipe({ name: 'locale' })
export class Locale implements PipeTransform {
 returnresponse: string;
 constructor(private UserService: UserService) { }
 transform(value: any) {
  return this.UserService.lookupapi_code(value)
 }
}

HTML

{{model.template[i].locale | locale | async }}

Редактировать

Объяснение того, почему это не работает для вас:

Ваше дело терпит неудачу, потому что: 1. Вы ничего не возвращаете 2. Даже если вы вернетесь, это бесполезно, читайте дальше.

someMethod() { <-- your transform
    someAsynBlock(() => {   <-- your subscribe
        return "result" <-- where will this return if you don't return the block itself? The block is asynchronous. 
    })
    // now don't mistakeen the above comment by returning the "someAsynBlock" 
    // because that will return a subscription Object which you can't use to retrieve the value
}

Когда вы используете async pipe, вы подписываетесь на Observable в самом шаблоне. https://angular.io/api/common/AsyncPipe#description

Также обратите внимание на побочные эффекты от использования асинхронного канала, но если вам придется использовать свою логику через locale канал, то я не вижу способа, как вы могли бы сделать это без использования async канала.

...