2016-07-05 49 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