Table des matières
Global before guard
Global résolution guard
Gardes exclusives au routage
Gardes au sein des composants
Processus complet d'analyse de la navigation
Maison interface Web Questions et réponses frontales Que sont les gardes de navigation de Vue ?

Que sont les gardes de navigation de Vue ?

Dec 22, 2021 pm 06:31 PM
vue

Les gardes de navigation incluent : 1. Garde avant globale "beforeEach" ; 2. Garde d'analyse globale "beforeResolve" ; 3. Garde exclusive à la route "beforeEnter" ; 4. Gardes au sein des composants "beforeRouteEnter" et "beforeRouteLeave".

Que sont les gardes de navigation de Vue ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, vue version 2.9.6, ordinateur DELL G3. La garde de navigation fournie par

vue-router est principalement utilisée pour surveiller la navigation en sautant ou en annulant. Il existe de multiples possibilités d'intégration dans le processus de navigation sur itinéraire : globalement, exclusivement pour un seul itinéraire, ou au niveau des composants.

N'oubliez pas que les modifications apportées aux paramètres ou aux requêtes ne déclencheront pas les gardes de navigation d'entrée/sortie. Vous pouvez répondre à ces modifications en observant l'objet $route ou en utilisant la garde intégrée au composant beforeRouteUpdate.

Global before guard

Vous pouvez utiliser router.beforeEach pour enregistrer un global before guard :

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
  // ...
})
Copier après la connexion

Lorsqu'une navigation est déclenchée, le global before guard est appelé dans l'ordre de création. Les gardes sont analysées et exécutées de manière asynchrone. À ce stade, la navigation attend que toutes les gardes soient résolues.

Chaque méthode de garde reçoit trois paramètres :

  • to : Route : l'objet de route cible qui est sur le point d'entrer

  • from : Route : la route que la navigation actuelle est sur le point de quitter

  • suivant : Fonction : certaine Cette méthode doit être appelée pour résoudre ce hook. L'effet d'exécution dépend des paramètres d'appel de la méthode suivante.

    • next() : passez au crochet suivant dans le pipeline. Si tous les hooks sont exécutés, l'état de navigation est confirmé.

    • next(false) : Interrompre la navigation en cours. Si l'URL du navigateur change (peut-être manuellement par l'utilisateur ou par le bouton Précédent du navigateur), l'adresse URL sera réinitialisée à l'adresse correspondant à l'itinéraire d'origine.

    • next('/') ou next({ path: '/' }) : accédez à une autre adresse. La navigation en cours est interrompue et une nouvelle navigation démarre. Vous pouvez transmettre un objet d'emplacement arbitraire à next, et des options telles que replace: true, name: 'home' et toutes les options utilisées dans les liens de routeur vers prop ou router.push peuvent être définies.

    • next(error) : (2.4.0+) Si le paramètre passé à next est une instance d'Error, la navigation sera terminée et l'erreur sera transmise au rappel enregistré par router.onError().

Assurez-vous que la fonction suivante est appelée exactement une fois dans une garde de navigation donnée. Il peut apparaître plus d'une fois, mais seulement si tous les chemins logiques ne se chevauchent pas, sinon le hook ne sera jamais analysé ou une erreur sera signalée. Voici un exemple de redirection vers /login lorsque l'utilisateur ne parvient pas à s'authentifier :

// BAD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  // 如果用户未能验证身份,则 `next` 会被调用两次
  next()
})
// GOOD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  else next()
})
Copier après la connexion

Global résolution guard

Nouveau dans la version 2.5.0

Dans la version 2.5.0+, vous pouvez en enregistrer un auprès de router.beforeResolve Global guard. Ceci est similaire à router.beforeEach, sauf que la garde d'analyse est appelée avant que la navigation ne soit confirmée et après que toutes les gardes intégrées aux composants et les composants de routage asynchrone ont été analysées.

Gardes exclusives au routage

Vous pouvez définir directement les gardes beforeEnter dans la configuration du routage :

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})
Copier après la connexion

Les paramètres de méthode de ces gardes sont les mêmes que ceux des gardes avant globales.

Gardes au sein des composants

Enfin, vous pouvez définir les gardes de navigation d'itinéraire suivants directement dans le composant de routage :

  • beforeRouteEnter

  • beforeRouteUpdate (nouveau dans 2.2)

  • beforeRouteLeave

const Foo = {
  template: `...`,
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate(to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}
Copier après la connexion

Le garde beforeRouteEnter ne peut pas y accéder car le garde est appelé avant que la navigation ne soit confirmée, donc le nouveau composant qui est sur le point d'apparaître n'a pas encore été créé.

Cependant, vous pouvez accéder à l'instance du composant en passant un rappel à next. Exécutez le rappel lorsque la navigation est confirmée et transmettez l'instance du composant comme paramètre de la méthode de rappel.

beforeRouteEnter (to, from, next) {
  next(vm => {
    // 通过 `vm` 访问组件实例
  })
}
Copier après la connexion

Notez que beforeRouteEnter est le seul garde qui prend en charge la transmission des rappels au suivant. Pour beforeRouteUpdate et beforeRouteLeave, ceci est déjà disponible, donc la transmission de rappels n'est pas prise en charge car ce n'est pas nécessaire.

beforeRouteUpdate (to, from, next) {
  // just use `this`
  this.name = to.params.name
  next()
}
Copier après la connexion

Cette protection de congé est généralement utilisée pour empêcher les utilisateurs de quitter soudainement avant d'enregistrer les modifications. Cette navigation peut être annulée avec next(false).

beforeRouteLeave (to, from, next) {
  const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
  if (answer) {
    next()
  } else {
    next(false)
  }
}
Copier après la connexion

Processus complet d'analyse de la navigation

  • La navigation est déclenchée.

  • Appelez la garde beforeRouteLeave dans le composant désactivé.

  • Appelez le global avant chaque garde.

  • Appelez beforeRouteUpdate guard (2.2+) dans les composants réutilisés.

  • Appeler avantEntrer dans la configuration du routage.

  • Résoudre les composants de routage asynchrone.

  • Appel avantRouteEntrez dans le composant activé.

  • Appelez le garde global beforeResolve (2,5+).

  • Navigation confirmée.

  • Appelez le global afterEach hook.

  • Déclenchez la mise à jour du DOM.

  • Appelez la fonction de rappel passée à next dans la garde beforeRouteEnter, et l'instance de composant créée sera transmise en tant que paramètre de la fonction de rappel.

【Recommandation associée : "Tutoriel vue.js"】

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter des fonctions aux boutons pour Vue Comment ajouter des fonctions aux boutons pour Vue Apr 08, 2025 am 08:51 AM

Vous pouvez ajouter une fonction au bouton VUE en liant le bouton dans le modèle HTML à une méthode. Définissez la logique de la fonction de méthode et d'écriture dans l'instance Vue.

Comment utiliser Bootstrap en Vue Comment utiliser Bootstrap en Vue Apr 07, 2025 pm 11:33 PM

L'utilisation de bootstrap dans vue.js est divisée en cinq étapes: installer bootstrap. Importer un bootstrap dans main.js. Utilisez le composant bootstrap directement dans le modèle. Facultatif: style personnalisé. Facultatif: utilisez des plug-ins.

Comment utiliser Watch in Vue Comment utiliser Watch in Vue Apr 07, 2025 pm 11:36 PM

L'option Watch dans Vue.js permet aux développeurs d'écouter des modifications de données spécifiques. Lorsque les données changent, regardez déclenche une fonction de rappel pour effectuer des vues de mise à jour ou d'autres tâches. Ses options de configuration incluent immédiatement, qui spécifie s'il faut exécuter un rappel immédiatement, et profond, ce qui spécifie s'il faut écouter récursivement les modifications des objets ou des tableaux.

Comment référencer le fichier JS avec Vue.js Comment référencer le fichier JS avec Vue.js Apr 07, 2025 pm 11:27 PM

Il existe trois façons de se référer aux fichiers JS dans Vue.js: spécifiez directement le chemin à l'aide du & lt; script & gt; étiqueter;; importation dynamique à l'aide du crochet de cycle de vie monté (); et l'importation via la bibliothèque de gestion de l'État Vuex.

Que signifie le développement de plusieurs pages Vue? Que signifie le développement de plusieurs pages Vue? Apr 07, 2025 pm 11:57 PM

Le développement multi-pages VUE est un moyen de créer des applications à l'aide du cadre Vue.js, où l'application est divisée en pages distinctes: Maintenance du code: La division de l'application en plusieurs pages peut rendre le code plus facile à gérer et à maintenir. Modularité: chaque page peut être utilisée comme module séparé pour une réutilisation et un remplacement faciles. Routage simple: la navigation entre les pages peut être gérée par une configuration de routage simple. Optimisation du référencement: chaque page a sa propre URL, ce qui aide le référencement.

Comment revenir à la page précédente par Vue Comment revenir à la page précédente par Vue Apr 07, 2025 pm 11:30 PM

Vue.js dispose de quatre méthodes pour revenir à la page précédente: $ router.go (-1) $ router.back () utilise & lt; router-link to = & quot; / & quot; Composant Window.History.back (), et la sélection de la méthode dépend de la scène.

Comment interroger la version de Vue Comment interroger la version de Vue Apr 07, 2025 pm 11:24 PM

Vous pouvez interroger la version Vue en utilisant Vue Devtools pour afficher l'onglet Vue dans la console du navigateur. Utilisez NPM pour exécuter la commande "NPM List -g Vue". Recherchez l'élément VUE dans l'objet "dépendances" du fichier package.json. Pour les projets Vue CLI, exécutez la commande "Vue --version". Vérifiez les informations de la version dans le & lt; script & gt; Tag dans le fichier html qui fait référence au fichier VUE.

Comment passer les paramètres pour la fonction Vue Comment passer les paramètres pour la fonction Vue Apr 08, 2025 am 07:36 AM

Il existe deux façons principales de transmettre des paramètres aux fonctions Vue.js: passer des données à l'aide de machines à sous ou lier une fonction avec Bind, et fournir des paramètres: passer des paramètres à l'aide de slots: passer des données dans des modèles de composants, accessibles dans les composants et utilisé comme paramètres de la fonction. PASS Paramètres à l'aide de Bind Binding: Bind Fonction dans l'instance Vue.js et fournissez des paramètres de fonction.

See all articles