1

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

例子:

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

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

主要思想是写在模板中,例如

[linkTo]="/welcome"

但导致路由器有类似的东西

/en/welcome

PS我使用ngrx/路由器

4

1 回答 1

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
    }
])
于 2016-07-05T09:17:05.080 回答