2015-12-23 36 views
16
@RouteConfig([ 
    {path: '/about', name: 'About', component: About, useAsDefault: true}, 
    {path: '/test', name: 'Test', component: Test} 
]) 

export class MyApp { 
    router: Router; 
    location: Location; 
    isCollapsed: boolean = true; 

    // ON ROUTE CHANGE { 
     this.isCollapsed = true; 
    // } 

    constructor(router: Router, location: Location) { 
     this.router = router; 
     this.location = location; 
    } 
} 

Ho bisogno di modificare il valore variabile su ogni cambio di percorso, come guardare questo evento in Angular 2.x?Orologio angolare2 per cambio rotta

+0

Per il nuovo router (=> RC.3), consultare http://stackoverflow.com/questions/37137455/angular-2-typescript-error-when-using-subscribe-function-on-new-router-rc -1/37137497 # 37137497 –

risposta

11

Nella versione finale di angolare (ad es angolare 2/4), si può fare questo

this.router.events.subscribe((event) => { 
    console.log(event); 
    if(event.url) { 
     console.log(event.url); 
    } 
}); 

Ogni volta che il percorso cambia, events Osservabile ha le informazioni. Fare clic su here per documenti.

+1

Questo ha fatto il trucco! Si noti che l'elemento router è un'istanza di Router: si dovrebbe "importare {Router} da" @ angular/router ";" '' e '' 'costruttore (router privato: Router) {}' ''. L'URL della proprietà – adripanico

+0

non esiste per l'evento di tipo. – tatsu

17

Ecco cosa uso nella mia app. Puoi iscriverti a un'istanza di Rotta per tenere traccia delle modifiche.

class MyClass { 
    constructor(private router: Router) { 
    router.subscribe((val) => /*detect changes*/) 
    } 
} 
+0

Siamo spiacenti, ho votato per difetto prima di cambiare la risposta per Angular2, questo è corretto – Zyzle

+1

Grazie! Funziona perfettamente. –

+2

@ulydev ti preghiamo di fornire plnkr o codice funzionante per questo routerRiconoscimento della modifica che non riesco a procurarti Come utilizzare il tuo codice. –

0

Se si desidera catturare l'evento in cui i cambiamenti di rotta, e inizializzare un codice come jQuery quindi utilizzare OnActive gancio. Per esempio:

import {Component} from 'angular2/core'; 
import {OnActivate,ComponentInstruction} from "angular2/router"; 
declare var $:any; 
declare var Foundation:any; 
@Component({ 
templateUrl :'/app/templates/home.html' 
}) 
export class HomeComponent implements OnActivate{ 

    routerOnActivate(next: ComponentInstruction, prev: ComponentInstruction) 
    { 

    new Foundation.Orbit($("#es-slide-show"), {}); 
    return true; 
    } 
} 
20

Se si utilizza

"@angular/router": "3.0.0-alpha.7", 
"@angular/router-deprecated": "2.0.0-rc.2", 

poi

this.router.events.subscribe((event) => { 
     console.log('route changed'); 
}); 
+0

Questa è la risposta corretta per le versioni correnti. Goli questo è stato difficile da trovare. +1 – FRECIA

+0

+1 La tua risposta è valida per le versioni correnti di Angular2. 'this.router.subscribe()' non funziona più. Invece devi iscriverti agli 'eventi' come dichiarato da Dimpu! – Bajro