How do I detect user navigating back in Angular2?
I have a component and I need to detect if user pressed back button in his browser to navigate back.
Currently I'm subscribing router events.
constructor(private router: Router, private activatedRoute: ActivatedRoute) {
this.routerSubscription = router.events
.subscribe(event => {
// if (event.navigatesBack()) ...
});
}
I know that I can use window.onpopstate
but it feels like a hack when using Angular2.
Solution 1:
EDIT Please don't do this.
The official docs say "This class should not be used directly by an application developer. Instead, use Location." Ref: https://angular.io/api/common/PlatformLocation
It's possible to use PlatformLocation
which has onPopState
listener.
import { PlatformLocation } from '@angular/common'
(...)
constructor(location: PlatformLocation) {
location.onPopState(() => {
console.log('pressed back!');
});
}
(...)
Solution 2:
IMO better method of listenting for popstate events is to subscribe to location service
import {Location} from "@angular/common";
constructor(private location: Location) { }
ngOnInit() {
this.location.subscribe(x => console.log(x));
}
It doesn't use PlatformLocation directly (as documentation suggest) and you can unsubscribe any time you want.
Solution 3:
import { HostListener } from '@angular/core';
and then listen for popstate
on the window
object:
@HostListener('window:popstate', ['$event'])
onPopState(event) {
console.log('Back button pressed');
}
This code works for me on latest Angular 2.