【发布时间】:2018-05-13 22:10:01
【问题描述】:
我有一个服务正在加载 JSON 文件并在自定义管道中使用该服务:
import { Pipe, PipeTransform } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { LanguageLoadService } from '../../services/language-load/language-load.service';
@Pipe({name: 'langAsset'})
export class LangAsset implements PipeTransform {
constructor(private languageService: LanguageLoadService) {
}
transform(textKey: string): Observable<any> {
return new Observable(observer => {
this.languageService.loadLanguage("en-US").subscribe((langData) => {
observer.next(langData[textKey] ? langData[textKey] : 'Error');
})
});
}
}
在模板上:
<p>{{'test' | langAsset | async }}</p>
但似乎转换在服务完成加载 JSON 之前运行,因为页面上的结果是 [object Object],并且当它从 loadLanguage 订阅内部登录时,console.log 会很好地打印出来。如何通过在转换函数中返回一个可观察对象而不是字符串来重新运行它?我知道我必须使用AsyncPipe,但我不确定该怎么做。
【问题讨论】:
标签: angular http angular2-pipe