2017-05-24 2 views
0

Ich entwickle eine mehrsprachige Angular4-Anwendung mit VS-Code.Routing mit Sprache in Angular + Typescript VS Code

Der Router hat so sein:

localhost/en-us/Visionen

ich eine Klasse namens TranslateHelper haben:

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; 
    } 
} 

die App-Routing. Modul ist:

und in der Fußzeile Ich versuche, die Sprache in der URL hinzuzufügen:

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> 

ich nicht erhalten jeden Fehler, aber die lang in der Fußzeile ist immer undefiniert, genau wie die params.lang ist.

kann mir jemand sagen, wie kann ich es beheben? trotzdem danke.

Antwort

0

Es ist, weil Ihre Rückkehr außerhalb Ihres Abonnements ist. Versuche, es hinein zu legen.

+0

was genau meinst du? Ich habe deine Antwort nicht verstanden –

+0

'zurück this.currentLanguage' sollte innerhalb des Abonnierens sein, nur ein paar Zeilen über – trichetriche

+0

Das wird nicht funktionieren, also nicht stören. Sie können etwas aus einem Abonnement nicht zurückgeben. – Chrillewoodz

0

Sie versuchen, etwas aus einem Abonnement zurückzugeben, das wird nicht wirklich funktionieren. Entweder können Sie die Route Params zurückgeben und diese in Ihrer Komponente abonnieren oder Sie können es so machen:

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

danken Ihnen, aber immer noch nicht funktioniert. Ich habe deine Lösung gemacht. noch undefiniert. können Sie mir bitte eine Erklärung liefern, damit ich verstehen kann –

+0

Im Grunde erstellen Sie eine Observable, die Ihre Komponente abonniert, und Sie geben einen Wert innerhalb der Subskriptionsaufruf. Wenn das alles ist, sollten Sie einfach den Parameter direkt in der Komponente tbh ohne den Helfer holen. Da es einfach mehr Code für keinen Grund wirklich hinzufügt. – Chrillewoodz

+0

Ich habe versucht, das Routing mit dem Abonnement direkt in der Komponente zu schreiben, aber immer noch undefiniert. this.route.params.subscribe (params => { this.lang = params.lang; }); –