web-dev-qa-db-fra.com

Angular: Historique de localisation

J'ai un formulaire avec un bouton "retour". Lorsque l'utilisateur appuie sur le bouton de retour, le script passe à la page précédente:

import { Location } from '@angular/common';

// In a place in La Mancha, whose name I do not want to remember...
this.location.back();

Mais que se passe-t-il lorsque l'utilisateur entre directement l'URL dans la barre d'adresse? Dans ces cas, l'application retourne à la page d'accueil du navigateur. Je voudrais quelque chose comme ça:

import { Location } from '@angular/common';

// In a place in La Mancha, whose name I do not want to remember...
if (this.location.history.length > 0) {
    this.location.back();
} else {
    this.router.navigate(['/home');
}

Est-ce possible?

13
Cequiel

Vous pouvez vérifier l'historique avec window.history.length. Par conséquent, votre fonction ressemblerait à

goBack() {
  if (window.history.length > 1) {
    this.location.back()
  } else {
    this.router.navigate(['/home'])
  }
}

docs: https://developer.mozilla.org/en-US/docs/Web/API/Window/history

Le problème est que certains navigateurs (par exemple, chrome) stockent la page initiale dans l'historique, donc window.history.length > 1 et vous serez redirigé vers la page initiale du navigateur.

Dans mon application, j'ai dû implémenter une logique supplémentaire pour déterminer où l'utilisateur doit aller dans un cas similaire.

goBack() {
  if (this.isHistory) {
    this.router.navigate(['/history'])
  } else {
    this.router.navigate(['/home'])
  }
}

Voici des détails sur la façon de déterminer quelle était votre URL précédente: Comment déterminer l'URL de la page précédente en angulaire?

11
paragonid