2016-07-05 29 views
0

我需要在路由中保存當前選定的語言。Angular2中的路徑中的Const params

例子:

/en/login 
/en/welcome 
/ru/register 
.... 

有一個簡單的方法來設置一些航線前綴或者我應該設置郎每條路線?

主要思想是在模板中像

[linkTo]="/welcome" 

寫但結果在路由器有類似

/en/welcome 

附:我使用ngrx/router

回答

1

創建一個存儲語言前綴的localStorage項目。
擴展路由器並覆蓋導航方法。
當路由器被告知導航時,注入語言前綴。

如果你不喜歡擴展路由器的想法,做一個包裝,並使用包裝代替。

@Injectable() 
export class MyRouter { 
    constructor(private _router: Router){} 

    navigate(url: string){ 
     var lang : string = localStorage.getItem("lang"); 
     this._router.navigate(["/"+lang+"/"+url]); 
    } 
} 

UPDATE

import { Router } from "@ngrx/router"; 
import { LocationStrategy } from "@angular/common"; 
import { Injectable } from "@angular/core"; 
@Injectable() 
export class GlobalRouter extends Router { 
    constructor(public platformStrategy: LocationStrategy) { // ANGULAR 2 DEPENDENCY INJECTOR SHOULD TAKE OVER 
    // it's not working 
     alert("constructor"); 
     super(platformStrategy); 
    } 

    normalize(url: string): string { 
     let router = super.normalize(url); 
     alert(`normalize router ${router}`); 
     return router; 
    } 
} 

bootstrap(AcademyApp, [ 
    HTTP_PROVIDERS, 
    provideStore(reducer), 
    runEffects(effects), 
    connectRouterToStore(), 
    provideRouter(routes), 
    provideDB(schema), 
    actions, 
    services, 
    provideForms(), 
    disableDeprecatedForms(), 
    FORM_PROVIDERS, 
    { 
     provide : Router, 
     useClass: GlobalRouter 
    } 
]) 
+0

不過我有一個問題。我創建了新的路由器,它擴展了ngrx路由器。但是,當我試圖向他提供,我有一個錯誤 *類型錯誤:無法讀取的未定義的屬性「getBaseHref」 * – Illorian

+0

我只是把它變成引導 { \t \t提供:路由器, \t \t useClass:GlobalRouter } – Illorian

+0

您需要在您的index.html文件中添加:',在'' – Colum