2016-07-05 6 views
0

Ich muss aktuelle ausgewählte Sprache in Routen speichern.Const Parameter in Routen in Angular2

Beispiel:

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

Gibt es eine einfache Möglichkeit, um etwas Präfix auf den Strecken zu setzen oder soll ich lang in jeder Route setzen?

Hauptidee ist wie

in Vorlagen etwas schreiben
[linkTo]="/welcome" 

Aber in Folge in Router haben so etwas wie

/en/welcome 

P. S. Ich verwende ngrx/router

Antwort

1

Erstellen Sie ein localStorage-Element, das das Sprachenpräfix speichert.
Erweitern Sie den Router und überschreiben Sie die Navigationsmethode.
Wenn der Router aufgefordert wird zu navigieren, injizieren Sie das Sprachpräfix.

Wenn Ihnen der Gedanke, den Router zu erweitern, nicht gefällt, erstellen Sie einen Wrapper und verwenden Sie stattdessen den Wrapper.

@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

Noch habe ich eine Frage. Ich habe neue Router, die ngrx Router erweitern. Aber wenn ich versuche, ihn zu schaffen, habe ich einen Fehler * Typeerror: kann nicht lesen Eigenschaft 'getBaseHref' undefinierte * – Illorian

+0

ich es nur in setzen Bootstrap { \t \t bieten: Router, \t \t useClass: GlobalRouter } – Illorian

+0

müssen Sie hinzufügen: '' in Ihre index.html Datei, direkt unter der '' – Colum

Verwandte Themen