2017-09-13 20 views
0

私の角型アプリケーションの翻訳にngx-translateサービスを使用しています。返す必要のある文字列へのパスを受け入れるメソッドを作成したいと思います。私の方法は次のようになります。は非同期呼び出しからデータを取得できません

public translateString(parameter: string): string { 
    let message = ""; 
    this.translate.get(parameter).subscribe((response) => { 
     message = response; 
    }); 
    return message; 
} 

しかし、それは常に空の文字列を返し、私はこの問題は、そうメッセージはメッセージ=応答の前に実行されます返す呼び出すサブスクライブだと思います。どんな解決策ですか?

答えて

0

データが同期的に利用可能ではありません。あなたは観測可能なものを返す必要があります。そして、呼び出し元は、メッセージが利用可能になったら、必要な処理を行うために購読することができます。

public translateString(parameter: string): Observable<String> { 
    return this.translate.get(parameter); 
} 

// and then used like this: 
SomeService.translateString('hello world') 
    .subscribe(message => { 
     console.log(message); 
    }) 
-1

あなたはsubscribe.Likeこの中にあなたのメッセージを返す必要があります。

public translateString(parameter: string): string { 
    let message = ""; 
    this.translate.get(parameter).subscribe((response) => { 
     message = response; 
     return message; 
    }); 
} 
+0

外部関数(translateString)は何も返さないため、このコードは効果的に何も行いません。 –

+0

@NicholasTower戻る文字列です。先頭行を見てください。 –

+0

型宣言についてお話ししていますか?はい、それは文字列を返すと主張します*。しかし実際のリターン・ステートメントはありません。 –

0

使用instant

これは、任意の観測を必要としません。

this.message = this.translate.instant('Language') 
+0

この方法では、値の代わりにキーを返します:/ – OjamaYellow

+0

あなたはすでにそれを試しましたか?私の場合、私は上記のようにキーを送り、その価値を得る。 – k11k2

+0

はい、en.jsonファイルで翻訳しています... this.translate.instant( "en.json内のキー")を呼び出すと、値の代わりにキーが返されます。 – OjamaYellow

関連する問題