而是試圖返回被觀察到發射的價值,嘗試只需返回Observable並允許消費者利用發射值,如設置類屬性:
服務:
public getTranslateMenuItem(key: string): Observable<string> {
return this.translate.get(key);
}
組件:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '{{title}}'
})
export class AppComponent {
title: string;
constructor(private someService: SomeService) {}
ngOnInit(): void {
this.someService.getTranslateMenuItem('foobar')
.subscribe(
value => this.title = value,
error => console.log(error),
complete => console.log('Completed');
);
}
}
這種方法,你會處理值,錯誤和完整的組件,並允許根據需要將服務只是處理檢索和處理/格式化值。
或者,您可以使用組件模板中的async管道來訂閱/取消訂閱發出的值。
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '{{title$ | async}}'
})
export class AppComponent {
title$: Observable<string>;
constructor(private someService: SomeService) {}
ngOnInit(): void {
this.title$ = this.someService.getTranslateMenuItem('foobar');
}
}
希望有幫助!
不要返回值,而是返回observable並允許消費者根據需要訂閱(next,error,complete)來設置組件屬性,處理錯誤等。如果您需要使用其他可觀察值動作操作符如switchMap或mergeMap可以幫助實現這一點。 –
你有沒有這樣建議:'private getTranslateMenuItem(key:string):Observable {}'? –
user3573738