Table des matières
分析
我是页面A啊
我是页面B啊
我是页面C啊
全局守卫
Analyse
Global guard
路由守卫
组件守卫
beforeRouteLeave
总结
完整的导航解析流程

vue-router a plusieurs hooks

Dec 22, 2021 pm 04:49 PM
vue-router crochet

Il y a 7 crochets : 1. beforeEach ; 2. beforeResolve ; 3. afterEach 4. beforeEnter ; 6. beforeRouteUpdate ;

vue-router a plusieurs hooks

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

Combien de fonctions de hook vue-router possède-t-il ? De quoi s’agit-il exactement et quel est le processus d’exécution ? vue-router 有几种钩子函数?具体是什么及执行流程是怎样的?

先上思维导图。

vue-router 钩子函数.png

分析

vue-router钩子函数 ,其实说的就是 导航守卫

引用官网的话

导航” 表示路由正在发生改变。

vue-router 提供的导航守卫主要用来通过 跳转取消 的方式 守卫导航 。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。

也就是:全局守卫路由守卫组件守卫

代码演示环境搭建

先简单搭建一下环境

index.js

/*
 * @Description:一尾流莺
 * @Date: 2021-03-21 16:17:56
 * @LastEditTime: 2021-07-18 15:14:42
 * @FilePath: \vite-project-js\src\router\index.js
 */

import { createRouter, createWebHashHistory } from 'vue-router';

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: '/a',
      component: () => import('../components/A.vue'),
    },
    {
      path: '/b',
      component: () => import('../components/B.vue'),
    },
    {
      path: '/c',
      component: () => import('../components/C.vue'),
    },
  ],
});
export default router;
Copier après la connexion

main.js

// index.js
import router from "./router"; 
createApp(App).use(router).mount("#app");
Copier après la connexion

页面A

<template>
  <div>
    <h1 id="我是页面A啊">我是页面A啊</h1>
    <comp></comp>
  </div>
</template>
Copier après la connexion

页面B

<template>
  <div>
    <h1 id="我是页面B啊">我是页面B啊</h1>
    <comp></comp>
  </div>
</template>
Copier après la connexion

页面C

<template>
  <div>
    <h1 id="我是页面C啊">我是页面C啊</h1>
    <comp></comp>
  </div>
</template>
Copier après la connexion

通用组件

<template>
  <div>我是公用组件啊</div>
</template>
Copier après la connexion

当前页面是这样的,有点丑,凑活看吧,咱也不是来学习 css

vue-router a plusieurs hooks

全局守卫

顾名思义,是要定义在全局的,也就是我们 index.js 中的 router 对象。

beforeEach

全局前置守卫,在路由跳转前触发,它在 每次导航 时都会触发。

通过 router.beforeEach 注册一个全局前置守卫。

vue-router a plusieurs hooks

参数

beforeEach 全局前置守卫接收三个参数

  • to: Route: 即将要进入的目标路由对象
  • from: Route: 当前导航正要离开的路由对象
  • next: Function: 一定要调用该方法不然会阻塞路由。

注意: next 参数可以不添加,但是一旦添加,则必须调用一次,否则路由跳转等会停止。

next()方法的几种情况

  • next(): 进行管道中的下一个钩子。
  • next(false): 中断当前的导航。回到 from 路由对应的地址。
  • next(’/’) 或者 next({ path: ‘/’ }): 跳转到一个不同的地址,可传递的参数与 router.push 中选项一致。
  • next(error): 导航终止,且该错误会被传递给 router.onError() 注册过的回调。

我们把前两个参数打印出来看一下,里面包含路径,参数,元信息等内容。

vue-router a plusieurs hooks

返回值

  • false:取消当前的导航。
  • null,undefined,true或者直接return:调用下一个导航守卫。

定义多个守卫

全局前置守卫可以定义多个,根据创建顺序调用。在所有守卫完成之前导航一直处于等待中。

下面这个例子中我们就定义了两个 beforeEach 全局前置守卫。可以看到,只有在两秒以后分别打印出两条日志后才进行页面的跳转。

vue-router a plusieurs hooks

vue-router a plusieurs hooks

除了 beforeEach 全局前置守卫之外,其他的全局守卫都可以定义多个,并且在所有守卫完成之前导航一直处于等待中,其他的钩子函数就不进行演示了。

beforeResolve

全局解析守卫,在路由跳转前,所有 组件内守卫异步路由组件 被解析之后触发,它同样在 每次导航 时都会触发。

通过 router.beforeResolve

Commencez par la cartographie mentale. 🎜🎜fonction de hook vue-router.png🎜

Analyse

🎜La fonction de crochet de vue-router fait en fait référence à garde de navigation. 🎜🎜Citation du site officiel🎜🎜🎜 "Navigation" indique que l'itinéraire change. 🎜🎜🎜🎜Le garde de navigation fourni par vue-router est principalement utilisé pour garder la navigation en sauter ou annuler > . 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. 🎜🎜🎜C'est-à-dire : Global Guard, Route Guard, Component Guard. 🎜🎜Construction d'un environnement de démonstration de code🎜🎜Tout d'abord, configurons brièvement l'environnement🎜🎜index.js🎜
router.beforeResolve((to, from, next) => {
  next();
})
Copier après la connexion
Copier après la connexion
🎜main. js🎜rrreee 🎜Page A🎜rrreee🎜Page B🎜rrreee🎜Page C🎜rrreee🎜🎜Composants communs🎜🎜rrreee🎜La page actuelle est comme ça, c'est un peu moche, il suffit de jeter un oeil, on n'est pas là pour apprendre < code>css 🎜🎜vue-router a plusieurs hooks🎜

Global guard

🎜Comme son nom l'indique, il est défini globalement, qui est l'objet router dans notre index.js</code >. 🎜🎜<strong><span style="max-width:90%">beforeEach</span></strong>🎜🎜Global front guard, déclenché avant le saut d'itinéraire, c'est <strong>chaque navigation</strong> être déclenché. 🎜🎜Enregistrez une garde globale beforeEach via <code>router.beforeEach. 🎜🎜vue-router a plusieurs hooks🎜🎜Paramètres 🎜🎜beforeEach La garde avant globale reçoit trois paramètres🎜
  • pour : Route : l'objet de routage cible qui est sur le point d'entrer
  • from : Route : L'objet route que la navigation actuelle est sur le point de quitter
  • suivant : Fonction : Cette méthode doit être appelée sinon la route sera être bloqué.
🎜Remarque : Le paramètre next n'a pas besoin d'être ajouté, mais une fois ajouté, il doit être appelé une fois, sinon le routage saute, etc. . s'arrêtera. 🎜🎜 Plusieurs cas de la méthode next()🎜
  • next() : Passez au hook suivant dans le pipeline.
  • next(false) : Interrompre la navigation en cours. Retourner à l'adresse correspondant à l'itinéraire depuis.
  • next('/') ou next({ path: '/' }) : Accédez à une adresse différente, les paramètres qui peuvent être transmis sont les mêmes que routeur Les options dans push sont les mêmes.
  • next(error) : La navigation est terminée et l'erreur sera transmise au rappel enregistré par router.onError().
🎜Imprimons les deux premiers paramètres et jetons un coup d'œil. Ils contiennent des chemins, des paramètres, des méta-informations, etc. 🎜🎜vue-router a plusieurs hooks🎜🎜Valeur de retour< /strong>🎜
  • false : Annule la navigation en cours.
  • retour nul, indéfini, vrai ou direct : appelez le prochain garde de navigation.
🎜Définir plusieurs gardes 🎜🎜 Plusieurs gardes avant globaux peuvent être définis et appelés selon l'ordre de création. La navigation est en attente jusqu'à ce que tous les gardes soient terminés. 🎜🎜Dans l'exemple suivant, nous définissons deux front guards globaux beforeEach. On peut voir que le saut de page ne se produit qu'après l'impression de deux journaux deux secondes plus tard. 🎜🎜vue-router a plusieurs hooks🎜🎜< img alt="vue-router a plusieurs hooks"/>🎜🎜sauf avantEach En plus de la garde avant globale, plusieurs autres gardes globales peuvent être définies, et la navigation attendra que toutes les gardes soient terminées. Les autres fonctions de crochet ne seront pas démontrées. 🎜🎜beforeResolve🎜🎜Garde de résolution globale, avant le saut de route, toutes les gardes intégrées au composant déclenchées Une fois le composant de routage asynchrone analysé, il sera également déclenché à chaque navigation. 🎜🎜Enregistrez un garde de résolution globale via router.beforeResolve. 🎜
router.beforeResolve((to, from, next) => {
  next();
})
Copier après la connexion
Copier après la connexion

回调参数,返回值和 beforeEach 一样。也可以定义多个全局解析守卫。

afterEach

全局后置钩子,它发生在路由跳转完成后,beforeEachbeforeResolve 之后,beforeRouteEnter(组件内守卫)之前。它同样在 每次导航 时都会触发。

通过 router.afterEach 注册一个全局后置钩子。

vue-router a plusieurs hooks

这个钩子的两个参数和 beforeEach 中的 tofrom 一样。然而和其它全局钩子不同的是,这些钩子不会接受 next 函数,也不会改变导航本身。

路由守卫

顾名思义,就是跟路由相关的钩子,我们的路由守卫只有一个,就是 beforeEnter

beforeEnter

需要在路由配置上定义 beforeEnter 守卫,此守卫只在进入路由时触发,在 beforeEach 之后紧随执行,不会在 paramsqueryhash 改变时触发。

vue-router a plusieurs hooks

beforeEnter 路由守卫的参数是 tofromnext ,同 beforeEach 一样。

组件守卫

顾名思义,是定义在路由组件内部的守卫。

beforeRouteEnter

vue-router a plusieurs hooks

路由进入组件之前调用,该钩子在全局守卫 beforeEach 和路由守卫 beforeEnter 之后,全局 beforeResolve 和全局 afterEach 之前调用。

参数包括 tofromnext

该守卫内访问不到组件的实例,也就是 thisundefined,也就是他在 beforeCreate 生命周期前触发。

beforeRouteUpdate

vue-router a plusieurs hooks

对于 beforeRouteUpdate 来说,this 已经可用了,所以给 next 传递回调就没有必要了。

beforeRouteLeave

vue-router a plusieurs hooks

对于 beforeRouteLeave 来说,this 已经可用了,所以给 next 传递回调就没有必要了。

总结

完整的导航解析流程

  • 导航被触发。

  • 在失活的组件里调用 beforeRouteLeave 守卫。

  • 调用全局的 beforeEach 守卫。

  • 在重用的组件里调用 beforeRouteUpdate 守卫。

  • 在路由配置里调用 beforeEnter

  • 解析异步路由组件。

  • 在被激活的组件里调用 beforeRouteEnter

  • 调用全局的 beforeResolve 守卫。

  • 导航被确认。

  • 调用全局的 afterEach 钩子。

  • 触发 DOM 更新。

  • 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

上面是官方给出的答案,现在我们用流程图来直观的展示一下。

vue-router a plusieurs hooks

【相关推荐:《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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

J'ai rencontré l'erreur vue-router « NavigationDuplicate : navigation redondante évitée vers l'emplacement actuel » dans mon application Vue - comment la résoudre ? J'ai rencontré l'erreur vue-router « NavigationDuplicate : navigation redondante évitée vers l'emplacement actuel » dans mon application Vue - comment la résoudre ? Jun 24, 2023 pm 02:20 PM

L'erreur vue-router « NavigationDuplicate:Avoidedredundantnavigationtocurrentlocation » rencontrée dans l'application Vue – comment la résoudre ? Vue.js devient de plus en plus populaire dans le développement d'applications frontales en tant que framework JavaScript rapide et flexible. VueRouter est une bibliothèque de codes de Vue.js utilisée pour la gestion du routage. Cependant, parfois

Un article qui explique le routage Vue en détail : vue-router Un article qui explique le routage Vue en détail : vue-router Sep 01, 2022 pm 07:43 PM

Cet article vous donnera une explication détaillée du Vue-Router dans le bucket de la famille Vue et en apprendra davantage sur les connaissances en matière de routage. J'espère qu'il vous sera utile !

Vue et Vue-Router : Comment partager des données entre composants ? Vue et Vue-Router : Comment partager des données entre composants ? Dec 17, 2023 am 09:17 AM

Vue et Vue-Router : Comment partager des données entre composants ? Introduction : Vue est un framework JavaScript populaire pour créer des interfaces utilisateur. Vue-Router est le gestionnaire de routage officiel de Vue, utilisé pour implémenter des applications monopage. Dans les applications Vue, les composants sont les unités de base pour créer des interfaces utilisateur. Dans de nombreux cas, nous devons partager des données entre différents composants. Cet article présentera quelques méthodes pour vous aider à réaliser le partage de données dans Vue et Vue-Router, et

Comment résoudre le problème « Erreur : composant de route invalide : xxx » lors de l'utilisation de vue-router dans une application Vue ? Comment résoudre le problème « Erreur : composant de route invalide : xxx » lors de l'utilisation de vue-router dans une application Vue ? Jun 25, 2023 am 11:52 AM

Vue est un framework frontal populaire qui permet aux développeurs de créer rapidement des applications Web efficaces et réutilisables. Vue-router est un plug-in du framework Vue qui aide les développeurs à gérer facilement le routage et la navigation des applications. Cependant, lorsque vous utilisez Vue-router, vous rencontrez parfois une erreur courante : "Error:Invalidroutecomponent:xxx". Cet article expliquera les causes et les solutions à cette erreur. La raison réside dans Vu

Comment résoudre le problème « Erreur : navigation redondante évitée vers l'emplacement actuel » lors de l'utilisation de vue-router dans l'application Vue ? Comment résoudre le problème « Erreur : navigation redondante évitée vers l'emplacement actuel » lors de l'utilisation de vue-router dans l'application Vue ? Jun 24, 2023 pm 05:39 PM

Lors de l'utilisation de vue-router dans une application Vue, le message d'erreur « Erreur : navigation redondante évitée vers l'emplacement actuel » apparaît parfois. Ce message d'erreur signifie « éviter une navigation redondante vers l'emplacement actuel » et est généralement provoqué par un clic répété sur le même lien ou par l'utilisation du même chemin de routage. Alors, comment résoudre ce problème ? Utilisez le modificateur exact lors de la définition du routeur

Vue-Router : Comment utiliser les méta-informations de routage pour gérer les itinéraires ? Vue-Router : Comment utiliser les méta-informations de routage pour gérer les itinéraires ? Dec 18, 2023 pm 01:21 PM

Vue-Router : Comment utiliser les méta-informations de routage pour gérer les itinéraires ? Introduction : Vue-Router est le gestionnaire de routage officiel de Vue.js, qui peut nous aider à créer rapidement des applications monopage (SPA). En plus des fonctions de routage courantes, Vue-Router prend également en charge l'utilisation de méta-informations de routage pour gérer et contrôler le routage. Les métainformations de routage sont un attribut personnalisé qui peut être attaché à une route, ce qui peut nous aider à implémenter une logique spéciale ou un contrôle d'autorisation. 1. Qu'est-ce que les métainformations de routage ? Les méta-informations de routage sont

Comment résoudre le problème « Erreur : échec de la résolution du composant asynchrone : xxx » lors de l'utilisation de vue-router dans une application Vue ? Comment résoudre le problème « Erreur : échec de la résolution du composant asynchrone : xxx » lors de l'utilisation de vue-router dans une application Vue ? Jun 24, 2023 pm 06:28 PM

L'utilisation de vue-router est un moyen courant d'implémenter le contrôle de routage dans les applications Vue. Cependant, lors de l'utilisation de vue-router, l'erreur « Erreur : Failedtoresolveasynccomponent : xxx » se produit parfois, qui est causée par une erreur de chargement de composant asynchrone. Dans cet article, nous explorerons ce problème et proposerons des solutions. Comprendre le principe du chargement asynchrone des composants. Dans Vue, les composants peuvent être créés de manière synchrone ou asynchrone.

Résoudre l'erreur Vue : impossible d'utiliser correctement vue-router pour le saut d'itinéraire Résoudre l'erreur Vue : impossible d'utiliser correctement vue-router pour le saut d'itinéraire Aug 17, 2023 pm 10:29 PM

Résolvez l'erreur Vue : impossible d'utiliser correctement vue-router pour les sauts de routage. Lorsque nous utilisons Vue pour développer des projets frontaux, nous utilisons souvent vue-router pour les sauts de routage de pages. Cependant, nous pouvons parfois rencontrer des erreurs lors de l'utilisation de vue-router, empêchant la route de sauter normalement. Cet article répondra à cette question et donnera les solutions correspondantes. Tout d'abord, avant d'utiliser vue-router, nous devons nous assurer que vue-rou a été correctement installé

See all articles