2015-12-27 16 views
12

Sono in grado di ottenere il percorso del percorso corrente come:/about, /,/news con location.path(). Ma come posso ottenere il suo alias (la parte 'come' nella definizione di una rotta)?Angular2 ottiene l'alias del percorso corrente

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

È possibile?

+0

motivo per cui si desidera ottenere alias? –

+3

Perché i percorsi potrebbero essere localizzati. Ho pensato che sarebbe stato meglio usare alias per verificare su quale pagina sono effettivamente su – Pietrzm

risposta

2

Si consiglia di non utilizzare la posizione, invece si dovrebbe usare esempio router.

nel componente, iniettare nel costruttore con:

constructor(public router: Router) 

che, si potrebbe ottenere il nome del componente:

this.router.currentInstruction.component.routeName 

io non sono sicuro di come ottenere come dal router config. Ma direttiva RouterLink dovrebbe essere posto giusto per iniziare con: https://angular.io/docs/ts/latest/api/router/RouterLink-directive.html

+1

ma perché non usare 'location.path()'? –

+1

Se hai hash, la strategia location.path non funzionerà. url/#/about restituirà '/' invece di 'about' –

+0

L'iterazione più recente del router non contiene 'currentInstruction' qual è l'equivalente? –

0

Se si conosce la lista dei possibili alias allora è possibile scoprire il nome dell'alias corrente utilizzando una combinazione di router.generate e route.isActiveRoute:

Per esempio, ho una procedura guidata con tre passaggi. Ho un elenco di alias passo in un array:

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

Ho quindi utilizzare il seguente codice per determinare il nome alias corrente:

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}`); 
} 

Disclaimer: non ho provato a vedere se questo funziona con i parametri del percorso.

3

NOTA: quanto segue è stato testato con la serie beta 2.0. Le versioni RC hanno un componente router aggiornato con modifiche di rottura. Il vecchio è stato rinominato in router-deprecated. Questo non è stato ancora testato contro il nuovo router.

Quanto segue verrà stampato Foo o Bar a seconda del percorso attivo.

@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

Quando si è all'interno di un componente secondario, è possibile utilizzare 'this._router.root.currentInstruction.component.routeName' (nota _root_) - a seconda della radice di cui si desidera sapere. – ZoolWay

1

Per> = Angular2 RC.x (nuovo router)

ci sono alias più nel nuovo router.

è possibile ottenere il percorso relativo della componente locale

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

o il percorso completo utilizzando

constructor(private router:Router) {} 

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

o

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

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

Problemi correlati