2017-09-09 5 views
0

私は、次の機能があります。Observerから値を返すには?

private getTranslateMenuItem(key: string): string { 
     this.translate.get(key).subscribe((res: string) => { 
     return res; 
    }); 
    } 

そして、私はそれが私のようにこれを呼び出したときにデータをsring私を返すことが必要です。

let title = this.getTranslateMenuItem('pop'); 
+0

値を返さず、オブザーバブルを返し、必要に応じてコンシューマがサブスクライブ(次、エラー、完了)してコンポーネントのプロパティを設定したり、エラーを処理したりすることができます。他のオブザーバブルswitchMapやmergeMapなどのアクション演算子を使用すると、それを達成できます。 –

+0

あなたはこれを提案していますか? 'private getTranslateMenuItem(key:string):Observable {}'? – user3573738

答えて

2

の代わりに、観察によって放出された値を返すようにしようと、してみてください

サービス:

単にそのようなクラスのプロパティを設定するように、放出された値を利用する消費者を観測を返すと許可
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'); 
    } 
} 

うまくいけば助けてください!

関連する問題