I have a service that's loading a JSON file and using that service in a custom pipe:
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');
})
});
}
}
And on the template:
<p>{{'test' | langAsset | async }}</p>
But it seems that transform runs before the service finishes loading the JSON, as the result is [object Object] on the page, and console.log prints it out fine when it logs from inside the loadLanguage subscribe. How can I get this to rerun, by returning an observable instead of a string in the transform function? I know I have to use AsyncPipe, but I'm unsure how to go about this.
Try using <p>{{'test' | langAsset | async | json}}</p>
It is a nested Json object which the html tag cannot understand the json pipe is equivalent to stringfy Json pipe
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With