言語プレフィックスを格納する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
}
])
それでも私は疑問を持っています。私はngrxルータを拡張する新しいルータを作成しました。しかし、私は彼を提供しようとすると、私はエラー * TypeError例外がありますプロパティを読み取ることができません 'getBaseHref' 未定義の* – Illorian
私はちょうどブートストラップ に入れて{ \t \tを提供します。Router、 \t \t useClass:GlobalRouter を} – Illorian
あなたはindex.htmlファイルに ' 'を追加する必要があります。これは ' ' –
Colum