2016-07-05 11 views
0

ルートに現在選択されている言語を保存する必要があります。Angular2のルートのConst params

例:

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

ルートのいくつかの接頭辞を設定するための簡単な方法はありますか私は、各ルートにLANGを設定するためにすべき?

主なアイデアは、

[linkTo]="/welcome" 

のようなテンプレート何かに書くしかし、ルータの結果に

/en/welcome 

P.S.ようなものがあります私は使用するngrx/router

答えて

1

言語プレフィックスを格納するlocalStorageアイテムを作成します。
ルータを拡張して、ナビゲートするmewthodを上書きします。
ルータにナビゲートするよう指示されたら、言語プレフィックスを注入します。

ルータの拡張を考えていない場合は、ラッパーを作成してラッパーを使用してください。

@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ルータを拡張する新しいルータを作成しました。しかし、私は彼を提供しようとすると、私はエラー * TypeError例外がありますプロパティを読み取ることができません 'getBaseHref' 未定義の* – Illorian

+0

私はちょうどブートストラップ に入れて{ \t \tを提供します。Router、 \t \t useClass:GlobalRouter を} – Illorian

+0

あなたはindex.htmlファイルに ''を追加する必要があります。これは ' ' – Colum

関連する問題