2017-05-24 58 views
0

我正在開發一個帶有VS代碼的多語言Angular4應用程序。在Angular + Typescript VS代碼中使用語言路由

路由器必須是這樣的:

本地主機/ EN-US /願景

我有一類叫做TranslateHelper:

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

應用程序的路由。模塊是:

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

和頁腳我試圖添加的語言中的網址:

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> 

我沒有收到任何故障,但郎頁腳總是不確定的,就像params.lang一樣。

有人能告訴我我該如何解決它?不管怎樣,謝謝你。

回答

0

這是因爲您的回報超出了您的訂閱範圍。嘗試把它放進去。

+0

你到底是什麼意思?我不明白你的回答 –

+0

'return this.currentLanguage'應該在訂閱裏面,只是在 – trichetriche

+0

以上的幾行就行了,所以不要打擾。您無法從訂閱中返回任何內容。 – Chrillewoodz

0

您試圖從訂閱中返回某些內容,但這不會真正起作用。要麼你可以返回路線PARAMS和訂閱,在您的組件,也可以做這樣的:

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

基本上你創建了一個你的組件訂閱的observable,並且你在訂閱調用中發出一個值。如果這就是所有要做的事情,你應該直接在組件tbh中直接獲取參數而無需幫助器。因爲它只是無故添加更多的代碼。 – Chrillewoodz

+0

我試圖直接在組件中編寫具有訂閱的路由,但仍未定義。 this.route.params.subscribe(params => { this.lang = params.lang; }); –