Navigation programmatique dans Vue Router 4

En Vue Router 4, il est possible d'effectuer une navigation par programmation, indépendamment des clics sur des liens. Cette approche repose principalement sur deux fonctions : push et replace.

La méthode router.push

La fonction router.push permet de naviguer vers une URL différente ou d'ajouter des paramètres de requête à l'URL courante. Voici plusieurs cas d'utilisation :

// Navigation par chemin simple
router('/admin-panel')

// Navigation via un objet de configuration
router({ path: '/admin-panel' })

// Ajout de paramètres de requête
router({ 
  path: '/signup', 
  query: { subscription: 'premium' }
})

Note : Si le chemin spécifié correspond au chemin actuel, seuls les paramètres de route seront mis à jour.

La méthode router.replace

Le fonctionnement de router.replace est identique à router.push, à ceci près qu'elle remplace l'entrée actuelle dans l'historique de navigation sans en ajouter une nouvelle.

// Redirection sans ajout dans l'historique
router('/admin-panel')

La méthode router.go

La méthode router.go permet de naviguer dans l'historique de navigation d'un nombre spécifié d'étapes, de manière similaire à window.history.go(n).

// Avancer d'une entrée d'historique
router(1)

// Reculer d'une entrée d'historique
router(-1)

// Avancer de trois étapes
router(3)

// Tentative de navigation au-delà des limites de l'historique
router(-150)
router(150)

Le paramètre attendu est un entier indiquant le nombre d'étapes à parcourir dans l'historique. Par exemple, go(1) est équivalent à forward(), tandis que go(-1) correspond à back().

Cas pratique : Redirection après authentification

Considérons un scénario d'authentification utilisateur. Après la connexion, nous souhaitons rediriger l'utilisateur vers la page qu'il tentait d'accéder. Nous pouvons définir un champ requiresAuth dans les méta-données des routes et le vérifier dans un garde de navigation global :

const routeDefinitions = [
  { 
    path: '/account/:identifier', 
    component: UserProfile, 
    meta: { requiresAuthentication: true }
  },
  // Autres définitions de routes...
]

router.beforeEach((destination, origin, proceed) => {
  const needsAuth = destination.matched.some(
    record => record.meta.requiresAuthentication
  )
  
  if (needsAuth && !checkUserSession()) {
    proceed({
      path: '/signin',
      query: { 
        requestedRoute: destination.fullPath 
      }
    })
  } else {
    proceed()
  }
})

Dans le composant de connexion, nous pouvons alors utiliser la navigation programmatique pour rediriegr l'utilisateur :

// Suite à la connexion réussie
const targetPath = this.$route.query.requestedRoute || '/dashboard'
this.$router(targetPath)

Étiquettes: Vue Router SPA JavaScript Navigation programmatique Garde de navigation

Publié le 25 juillet à 09h11