2016-06-18 31 views
5

Sto cercando di ottenere il nome del percorso corrente o il percorso percorso nel mio app.component quando il percorso cambia in modo tale che Posso usare il nome della rotta come classe di pagina attorno a un div wrapper. Sto cercando di capire il modo migliore per gestire questo. In precedenza stavo sottoscrivendo le proprietà di modifica del router come ho elencato di seguito, ma sembra che questo non sia più disponibile con @ angular/router 3.0.0-alpha.3. Se qualcuno ha qualche pensiero o suggerimento sarei molto grato.Angular2 @ angular/router 3.0.0-alpha.3 - Come ottenere il nome o il percorso dell'itinerario quando il percorso cambia

this.router.changes.subscribe((val) => { 
    var path = this._location.path(); 
    if (path.indexOf('page-name') !== -1) { 
    this.pageClass = 'page-name'; 
    } 
}) 
+0

Non ci sono nomi di percorso in questo router (solo percorso) –

+0

se riesco a ottenere il percorso del router ogni volta che cambia il percorso che potrebbe funzionare anche. – orion583

+0

Avendo lo stesso problema. Se hai trovato una soluzione puoi pubblicarla? –

risposta

0

Ciò potrebbe aiutare,

import { CanActivate, Router, RouterStateSnapshot } from '@angular/router'; 

@Component({ 
    selector: 'my-component', 
    templateUrl: 'my-component.html' 
}) 
export class MyComponent implements CanActivate { 
    constructor(private router: Router) {} 

    canActivate(state: RouterStateSnapshot) { 
    // this is the future route you are intended to visit 
    console.log(state.url); 
    } 
} 

Maggiori dettagli a https://angular.io/docs/ts/latest/guide/router.html

+0

L'interfaccia OnActivate non esiste più con il router v3, quindi non penso che funzionerà. E comunque, classe RouteSegment. – Maxime

+0

@Maxime è corretto, sia RouteSegment che OnActive non sono più disponibili in v3. Ottengo i seguenti errori quando provo ad includerli. @ angular/router/index "'non ha mng esportato' RouteSegment '. @ angular/router/index"' non ha mng esportati 'OnActivate' – orion583

+0

Lo stesso problema, RouteSegment è sparito. Cosa dovremmo usare adesso ??? Odio queste enormi modifiche "RC". –

6

risposta di Steve è quello documentato attualmente, ma l'url osservabili sul ActivatedRoute non è sparare per me, tranne quando ho premere l'url di base (es: passando da/index a/index/item funziona, ma passando da/index/item a index/item/2, index/dashboard o even/index no).

Non sono sicuro se la seguente soluzione è una pratica migliore né quali sono le implicazioni di prestazione sono, ma sono stato in grado di ottenere il percorso attivo sulla NavigationEnd evento del router con il seguente:

import { Component, OnInit, OnDestroy } from '@angular/core'; 
import { ROUTER_DIRECTIVES, Router, NavigationEnd } from '@angular/router'; 

@Component({ 
    selector: 'navbar', 
    directives: [ROUTER_DIRECTIVES], 
    template: ` 
       ... 
       `  
}) 

export class NavBarComponent implements OnInit, OnDestroy { 
    private sub: any; 

    constructor(private router: Router) { 
    } 

    ngOnInit() { 
     this.sub = this.router.events.subscribe(e => { 
      if (e instanceof NavigationEnd) { 
       console.log(e.url); 
      } 
     }); 
    } 


    ngOnDestroy() { 
     this.sub.unsubscribe(); 
    } 
} 

Si attiva ogni volta che si modifica il percorso, indipendentemente dalla profondità della struttura o da dove si naviga verso/da.

+0

+1: Ho avuto un problema simile. L'osservabile di 'ActivatedRoute' non sparava durante la navigazione attraverso l'app. Ma la direttiva 'RouterLinkActive' ha modificato correttamente le classi di collegamento in base alla rotta corrente. 'RouterLinkActive' usa lo stesso approccio di questa risposta: ascoltando l'evento' NavigationEnd'. – Biggie

Problemi correlati