Как я могу обнаружить, что пользователь перешел обратно в Angular2?
У меня есть компонент, и мне нужно определить, нажал ли пользователь кнопку назад в своем браузере, чтобы вернуться назад.
В настоящее время я подписываюсь на события маршрутизатора.
constructor(private router: Router, private activatedRoute: ActivatedRoute) {
this.routerSubscription = router.events
.subscribe(event => {
// if (event.navigatesBack()) ...
});
}
Я знаю, что я могу использовать window.onpopstate
, но при использовании Angular2 он выглядит как взлома.
Ответы
Ответ 1
Можно использовать PlatformLocation
, у которого есть onPopState
прослушиватель.
import { PlatformLocation } from '@angular/common'
(...)
constructor(location: PlatformLocation) {
location.onPopState(() => {
console.log('pressed back!');
});
}
(...)
Ответ 2
Лучший способ подсчета IMO для событий popstate - подписаться на службу определения местоположения
import {Location} from "@angular/common";
constructor(private location: Location) { }
ngOnInit() {
this.location.subscribe(x => console.log(x));
}
Он не использует PlatformLocation напрямую (как предполагает документация), и вы можете отказаться от подписки в любое время.
Ответ 3
import { HostListener } from '@angular/core';
а затем прослушать popstate
объекта window
:
@HostListener('window:popstate', ['$event'])
onPopState(event) {
console.log('Back button pressed');
}
Этот код работает для меня на последнем Angular 2.
Ответ 4
В качестве ответа thorin87 не используйте PlatformLocation. Нам нужно подписаться на отмену подписки.
import { Subscription } from 'rxjs/Subscription'; ngOnInit() {
this.subscription = <Subscription> this.location.subscribe( () => x => console.log(x) );
}
ngOnDestroy() {
this.subscription.unsubscribe();
}