Подтвердить что ты не робот

Как я могу обнаружить, что пользователь перешел обратно в Angular2?

У меня есть компонент, и мне нужно определить, нажал ли пользователь кнопку назад в своем браузере, чтобы вернуться назад.

В настоящее время я подписываюсь на события маршрутизатора.

constructor(private router: Router, private activatedRoute: ActivatedRoute) {

    this.routerSubscription = router.events
        .subscribe(event => {

            // if (event.navigatesBack()) ...

        });

}

Я знаю, что я могу использовать window.onpopstate, но при использовании Angular2 он выглядит как взлома.

4b9b3361

Ответ 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();
}