2015-12-27 8 views
12

Ich kann den Pfad der aktuellen Route abrufen wie:/about, /,/news mit location.path(). Aber wie kann ich stattdessen seinen Alias ​​bekommen (der 'as' Teil in der Definition einer Route)?Angular2 bekomme den Aliasnamen der aktuellen Route

{ path: '/about', as: 'About', component: About } 

Ist es möglich?

+0

mit bekommen, warum Sie alias zu bekommen? –

+3

Weil Pfade schließlich lokalisiert werden würden. Ich dachte, es wäre besser, Aliase zu verwenden, um zu überprüfen, auf welcher Seite ich eigentlich bin – Pietrzm

Antwort

2

Sie nicht Standort verwenden, um passieren, stattdessen sollten Sie Router-Instanz verwenden.

In Ihrer Komponente, injizieren sie in Konstruktor mit:

constructor(public router: Router) 

als Sie Namen der Komponente mit erhalten könnte:

this.router.currentInstruction.component.routeName 

Ich bin nicht sicher, wie Sie als von Router erhalten Konfig. Aber sollte Router Richtlinie richtiger Ort, um zu starten mit: https://angular.io/docs/ts/latest/api/router/RouterLink-directive.html

+1

, aber warum nicht 'location.path()' verwenden? –

+1

Wenn Sie Hash-Strategie location.path haben, wird nicht funktionieren. url/#/about wird '/' anstelle von 'über' zurückgeben –

+0

Die neueste Iteration des Routers enthält nicht 'currentInstruction' was ist das Äquivalent? –

0

Wenn Sie die Liste der möglichen Aliase wissen, dann ist es möglich, den Namen des aktuellen Alias, um herauszufinden, eine Kombination aus router.generate und route.isActiveRoute mit:

Für Beispiel: Ich habe einen Assistenten mit drei Schritten. Ich habe eine Liste von Schritt Aliase in einem Array:

private wizardAliases = [ 
    'wizardStep1', 
    'wizardStep2', 
    'wizardStep3' 
]; 

ich dann den folgenden Code verwenden, um die aktuellen Alias-Namen zu ermitteln:

const alias = this.wizardAliases 
    .map(alias => ({ alias, navigationInstruction: this.router.generate([alias]) })) 
    .filter(x => this.router.isRouteActive(x.navigationInstruction)) 
    .map(x => x.alias); 

if (alias.length === 1) { 
    console.log(`alias is ${alias}`); 
} 

Haftungsausschluss: Ich habe nicht, ob das funktioniert, um zu sehen versucht, mit Routenparametern.

3

HINWEIS: Folgendes wurde mit der Betaversion 2.0 getestet. Die RC-Versionen haben eine aktualisierte Router-Komponente mit brechenden Änderungen. Der alte wurde in router-deprecated umbenannt. Dies wurde noch nicht gegen den neuen Router getestet.

Das Folgende wird Foo oder Bar je nach Ihrer aktiven Route drucken.

@Component({ 
    selector: 'app', 
    templateUrl: 'app/app.html', 
    directives: [ROUTER_DIRECTIVES] 
}) 
@RouteConfig([ 
    {path:'/', name: 'Foo', component: FooComponent, useAsDefault: true}, 
    {path:'/bar', name: 'Bar', component: BarComponent, useAsDefault: false}, 
]) 
export class AppComponent implements OnInit { 
    constructor(private _router: Router) { 
    } 

    ngOnInit() { 
     console.log('current route name', 
        this._router.currentInstruction.component.routeName); 
    } 
} 
+1

Wenn Sie sich innerhalb einer Unterkomponente befinden, können Sie 'this._router.root.currentInstruction.component.routeName' (Anmerkung _root_) verwenden - abhängig davon, von welchem ​​Root Sie wissen möchten. – ZoolWay

1

Für> = Angular2 RC.x (neuen Router)

Es gibt keine Aliase mehr im neuen Router.

Sie können die relative Route der lokalen Komponente

routerOnActivate(curr:RouteSegment, prev?:RouteSegment, currTree?:RouteTree, prevTree?:RouteTree):void { 
    console.log(curr.stringifiedUrlSegments); 
    } 

oder den vollständigen Pfad

constructor(private router:Router) {} 

    routerOnActivate(curr:RouteSegment, prev?:RouteSegment, currTree?:RouteTree, prevTree?:RouteTree):void { 
    console.log(this.router.serializeUrl(tree)); 
    } 

oder

constructor(router:Router, private location:Location) { 
    router.changes.subscribe(() => { 
    console.log(this.location.path()); 
    }); 
} 
+0

Siehe auch http://stackoverflow.com/questions/37183874/get-the-path-or-the-name-of-the-routes-in-angular-2/37207316#37207316 –

Verwandte Themen