在Angular2的路线中的Const params

时间:2016-07-05 08:22:58

标签: angular angular2-routing ngrx

我需要在路线中保存当前选定的语言。

示例:

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

是否有一种简单的方法可以在路线上设置一些前缀,或者我应该在每条路线中设置lang?

主要思想是写入类似

的模板
[linkTo]="/welcome"

但结果路由器有类似

的结果
/en/welcome

P.S。我使用ngrx/router

1 个答案:

答案 0 :(得分:1)

创建一个存储语言前缀的localStorage项目 扩展路由器并覆盖导航方法 当路由器被告知导航时,请注入语言前缀。

如果您不喜欢扩展路由器,请创建一个包装器,然后使用包装器。

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

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

<强>更新

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
    }
])