2017-11-15 1 views
0
import {TranslateService, LangChangeEvent} from "@ngx-translate/core"; 
class ExportLanguageFun { 
    public currentLang : string; 
    constructor(private translate : TranslateService) { 
    } 
    public static setValue(): string { 
     this.translate 
     .onLangChange 
    .subscribe(lang => { 
    this.currentLang = lang; 
    }) 
    return this.currentLang; 
     } 
    } 

export let exportLanguage = ExportLanguageFun.setValue(); //エラー: 'setValue'プロパティが 'typeof ExportLanguageFun'型に存在しません。クラスからの角度2タイプの書き出し値

予想される出力 console.log(let "someValue");

+0

observableを使用しています。この値は、this.currentLangにlangの値を割り当てる新しい値を監視します。 observableの外でthis.currentLangを返します。 javascriptは非同期で実行されるため、更新する前にthis.currentLangが新しい値を持つのを待つ必要はありません。ここで何を達成しようとしていますか? – Notmfb

+0

はい私は観察可能なものを使用しています。私はAPIから来てthis.currentLangに値を設定しようとしています。 this.currentLangの値を返す必要があります。 – rebello

+0

右の値は、購読関数外では返すことができません。それは動作しません。一般に、更新するたびに 'lang'変数を使って何かをするので、おそらくこれを返すのは、setValue()を呼び出してデータにアクセスしようとするたびに、再登録する。これは記憶を食うでしょう。私は助けるかもしれない以下の答えを書いています。 – Notmfb

答えて

0

ここで構造を再考する必要があります。あなたがここに戻ってほしいのは、観察可能なものの中からのラングです。あなたはここで何をやっているのかを再構成する必要があります。

public static setValue(): string { 
    return this.translate.onLangChange 
} 

次に、関数を呼び出すと、その関数にサブスクライブしてそこで何かすることができます。

this.setValue().subscribe(lang => { 
    this.currentLang = lang; 
    // do something else with it 
}) 

サブスクライブすると、新しい値が追加されるたびに関数が実行されます。価値を返そうとするのではなく、あなたがそれを購読している場所であれば、それぞれの変更で何かをしてください。

関連する問題