131 votes

Comment puis-je revenir en arrière sur vue-router ?

D'accord, pour expliquer cela simplement :

J'ai 3x pages.

  • Page 1 (Accueil)
  • Page 2 (Menu)
  • Page 3 (À propos)

La page 1 a un-

bouton qui, lorsqu'il est cliqué, routera vers "/menu".

Pour l'instant, la Page 2 (Menu) a un

bouton et lorsque ce bouton est cliqué, il revient à l'emplacement précédent "/" Page 1 (Accueil).

Mais je ne veux pas créer un composant pour le routeur pour chaque page pour 'revenir' à la page précédente (car si j'avais 100 pages cela pourrait nécessiter beaucoup de travail pour revenir en arrière). Y a-t-il un moyen de le faire avec vue-router ? similaire à window.history.back()

Je suis curieux de voir s'il y a un moyen de le faire car je ne le trouve pas dans la documentation.

3 votes

1 votes

@yuriy636's est probablement la meilleure réponse. Actuellement, nous avons un composant externe avec le bouton de retour qui utilise la manipulation de chaîne sur l'URL actuelle pour revenir à la dernière page dans la route. Nous passerons probablement à la méthode router.go lorsque nous en aurons l'occasion maintenant.

1 votes

Ok merci! C'était juste sous mon nez! Je ne suis pas vraiment sûr comment écrire ceci dans ma syntaxe cependant. Désolé! Je suis novice dans ce domaine!

297voto

Vous pouvez utiliser navigation programmatique. Pour revenir en arrière, vous utilisez ceci :

router.go(n) 

n peut être positif ou négatif (pour revenir en arrière). C'est la même chose que history.back(). Ainsi, vous pouvez avoir votre élément comme ceci :

retour

1 votes

Quelqu'un a-t-il eu un problème avec cela sur IE11? Par exemple, si j'ouvre une page via router-link, clique sur mon bouton pour revenir en arrière, cependant si j'ouvre la même page via router-link, le router.go(-1) efface mon URL mais rien ne se passe.

1 votes

Je veux revenir à la page précédente s'il n'y a pas d'identifiant au chargement, cela fonctionne mais lors du rafraîchissement de la page. .go(-1) va en arrière de 2 pages au lieu d'une page.

0 votes

Question de débutant, est-ce que c'est ok si nous utilisons la balise a ici au lieu de router-link

44voto

Abhishek Singh Points 239

Utilisez $router.back() directement pour revenir/retourner de manière programmatique sur vue-router. Ou si vous êtes dans le template du composant, utilisez router.back().

18 votes

C'est $router.back()

3 votes

@aspirinemaga ce n'est pas si vous l'utilisez dans le modèle du composant, si c'est le cas vous le transmettez comme to="router.back()"

33voto

yeikiu Points 209

Cela fonctionne comme une horloge pour moi :

methods: {
 hasHistory () { return window.history.length > 2 }
}

Ensuite, dans le modèle :

« 
  Retour

12 votes

Si vous venez d'un autre site Web externe à votre application, vous pensez que vous pouvez revenir à une page précédente de votre application, mais vous finiriez en fait par quitter pour un site Web externe.

0 votes

Les piles de mon horloge sont mortes

6voto

ojczeo Points 27

Si vous utilisez Vuex vous pouvez utiliser https://github.com/vuejs/vuex-router-sync

Il vous suffit de l'initialiser dans votre fichier principal avec :

import VuexRouterSync from 'vuex-router-sync';
VuexRouterSync.sync(store, router);

Chaque changement de route mettra à jour l'objet d'état route dans Vuex. Vous pouvez ensuite créer un getter pour utiliser l'objet from dans l'état de la route ou simplement utiliser l'state (il est préférable d'utiliser les getters, mais c'est une autre histoire https://vuex.vuejs.org/en/getters.html), donc en bref cela donnerait (à l'intérieur des méthodes/valeurs des composants) :

this.$store.state.route.from.fullPath

Vous pouvez également le placer simplement dans le composant :

  Retour 

Ainsi, lorsque vous utilisez le code ci-dessus, le lien vers le chemin précédent sera généré dynamiquement.

4 votes

Cela cause un problème de boucle infinie

0 votes

@TonyGW Non, cela ne fait pas.

3voto

Tony O'Hagan Points 1330

Cette réponse à cette question devient beaucoup plus difficile si vous codez une application mobile car vous avez maintenant besoin d'une solution intégrée qui prend en compte l'historique de navigation à partir soit de votre bouton de retour UI, SOIT du bouton "retour" fourni par le dispositif mobile !

Des frameworks comme Ionic et Quasar peuvent intercepter les événements du bouton de retour sur les dispositifs mobiles. Quasar gère ces événements pour vous et adapte le comportement pour les builds de plateforme de bureau et mobiles, de sorte que par exemple un build d'application mobile Cordova/Capacitor garantira qu'une action de "retour" peut intelligemment fermer une boîte de dialogue, revenir en arrière d'une page ou même fermer l'application !

0 votes

Quasar v2 ne fournit plus cette directive et le lien est maintenant brisé. Il intercepte toujours en arrière avec une approche différente. Voir quasar.dev/quasar-plugins/dialog#cordova-capacitor-back-butt‌​on et quasar.dev/quasar-cli/developing-capacitor-apps/…

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X