2017-05-24 17 views
0

私はVSコードで複数言語のAngular4アプリケーションを開発しています。Angular + TypescriptのVSコードでルーティングするコード

ルータはこのようにする必要があり:

import { ActivatedRoute } from '@angular/router'; 
export class TranslateHelper { 
    private currentLanguage: string; 
    private defaultLanguage = 'de-de'; 

    constructor(private route: ActivatedRoute) {} 

    public getCurrentLanguage() { 
     this.route.params.subscribe(params => { 
     this.currentLanguage = params.lang; 
    }); 

    return this.currentLanguage; 
    } 
} 

アプリルーティング:私はTranslateHelperというクラスを持っている

はlocalhost/EN-US /ビジョン

。モジュール:

const routes: Routes = [ 
    { path: ':lang/visions', component: VisionsComponent}, 
]; 

と私はURLに言語を追加しようとしていますフッターに:

export class FooterComponent implements OnInit { 
    public lang; 

    constructor(private translateHelper: TranslateHelper) { } 

    ngOnInit() { 
    this.lang = this.translateHelper.getCurrentLanguage(); 
    } 

} 

HTML:

<li><a [routerLink]="[lang, 'visions']">Visions</a></li> 

、私はどんな失敗を受信しませんが、フッターにlangは常に定義されていませんparams.langとまったく同じです。

誰でも教えてください。どのように修正できますか?とにかくありがとうございました。

答えて

0

あなたのリターンは購読者の外にあるからです。内部に入れてみてください。

+0

正確にはどういう意味ですか?私はあなたの答えを理解していませんでした –

+0

'返すthis.currentLanguage'は、購読の内側にあるべきです – trichetriche

+0

の上のちょうど2本の行それはどちらもうまくいきません。あなたはサブスクリプションから何かを返すことはできません。 – Chrillewoodz

0

サブスクリプション内から何かを返そうとしていますが、実際には機能しません。経路パラメータを返信してコンポーネントに登録するか、次のようにすることができます。

export class TranslateHelper { 
    private currentLanguage: string; 
    private defaultLanguage = 'de-de'; 

    private language: Subject<any> = new Subject<any>(); 

    public language$ = language.asObservable(); 

    constructor(private route: ActivatedRoute) {} 

    public getCurrentLanguage() { 
     this.route.params.subscribe(params => { 
     this.language.next(params.lang) 
     }); 
    } 
} 


export class FooterComponent implements OnInit { 
    public lang; 

    constructor(private translateHelper: TranslateHelper) { } 

    ngOnInit() { 

    this.translateHelper.language$.subscribe(language => { 
     this.lang = language; 
    }): 
    } 

} 
+0

ありがとう、それでも動作していません。私はあなたの解決策を行いました。まだ未定義です。 私は理解できるようにいくつかの説明を教えてください。 –

+0

基本的には、コンポーネントがサブスクライブしているオブザーバブルを作成し、サブスクライブコール内で値を送出します。それだけであれば、ヘルパーなしでコンポーネントtbhで直接パラメータを取得する必要があります。本当に理由のないコードを追加するだけです。 – Chrillewoodz

+0

サブスクリプションを持つルーティングをコンポーネントに直接書き込もうとしましたが、まだ定義されていません。 this.route.params.subscribe(params => { this.lang = params.lang; }); –

関連する問題