¿Cómo puedo detectar que el usuario navegue nuevamente en Angular2?

Tengo un componente y necesito detectar si el usuario presionó el botón Atrás en su navegador para navegar de nuevo.

Actualmente estoy suscribiendo eventos de enrutador.

constructor(private router: Router, private activatedRoute: ActivatedRoute) { this.routerSubscription = router.events .subscribe(event => { // if (event.navigatesBack()) ... }); } 

Sé que puedo usar window.onpopstate pero se siente como un truco cuando uso Angular2.

Es posible usar PlatformLocation que tiene onPopState escucha onPopState .

 import { PlatformLocation } from '@angular/common' (...) constructor(location: PlatformLocation) { location.onPopState(() => { console.log('pressed back!'); }); } (...) 

El mejor método de IMO para resistir eventos de estado emergente es suscribirse al servicio de ubicación

 import {Location} from "@angular/common"; constructor(private location: Location) { } ngOnInit() { this.location.subscribe(x => console.log(x)); } 

No utiliza PlatformLocation directamente (como lo sugiere la documentación) y puede darse de baja en cualquier momento que desee.

 import { HostListener } from '@angular/core'; 

y luego escucha popstate en el objeto window :

  @HostListener('window:popstate', ['$event']) onPopState(event) { console.log('Back button pressed'); } 

Este código funciona para mí en el último Angular 2.

Como respuesta thorin87 no use PlatformLocation. Necesitamos suscribir una cancelación de suscripción.

 import {Subscription} from 'rxjs/Subscription'; ngOnInit() { this.subscription = this .location .subscribe(() => x => console.log(x)); } ngOnDestroy() { this.subscription.unsubscribe(); }