目次
分析
我是页面A啊
我是页面B啊
我是页面C啊
名前が示すように、これはグローバルに定義されており、
路由守卫
组件守卫
beforeRouteLeave
总结
完整的导航解析流程
ホームページ ウェブフロントエンド フロントエンドQ&A vue-router にはいくつかのフックがあります

vue-router にはいくつかのフックがあります

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

フックは 7 つあります: 1. beforeEach; 2. beforeResolve; 3. afterEach; 4. beforeEnter; 5. beforeRouteEnter; 6. beforeRouteUpdate; 7. beforeRouteLeave。

vue-router にはいくつかのフックがあります

このチュートリアルの動作環境: Windows7 システム、vue2.9.6 バージョン、DELL G3 コンピューター。

vue-router フック関数はいくつありますか?それは正確に何であり、実行プロセスは何ですか?

まずはマインドマップから始めます。

vue-router 钩子函数.png

分析

フック関数

ofvue-router は、実際には ナビゲーション ガード # を参照します##。

公式サイトより引用

Navigation」はルートが変更中であることを示します。

vue-router 提供されるナビゲーション ガードは、主に jump または cancel Guard Navigation# に使用されます。 ##。ルート ナビゲーション プロセスを組み込む機会は複数あります。グローバル、単一ルート専用、またはコンポーネント レベルです。

つまり、
グローバル ガード

ルーティング ガードコンポーネント ガードです。

コードデモ環境の構築まず簡単に環境をセットアップします

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;
ログイン後にコピー

main .js

// index.js
import router from "./router"; 
createApp(App).use(router).mount("#app");
ログイン後にコピー

ページ A

<template>
  <div>
    <h1 id="我是页面A啊">我是页面A啊</h1>
    <comp></comp>
  </div>
</template>
ログイン後にコピー

ページ B

<template>
  <div>
    <h1 id="我是页面B啊">我是页面B啊</h1>
    <comp></comp>
  </div>
</template>
ログイン後にコピー

ページ C

<template>
  <div>
    <h1 id="我是页面C啊">我是页面C啊</h1>
    <comp></comp>
  </div>
</template>
ログイン後にコピー

一般コンポーネント

<template>
  <div>我是公用组件啊</div>
</template>
ログイン後にコピー

現在ページ これはこんな感じです、ちょっと見苦しいです、ただ見てみましょう、私たちは学ぶためにここにいるわけではありません
css

vue-router にはいくつかのフックがあります

Global Guard

名前が示すように、これはグローバルに定義されており、

index.js

router オブジェクトです。

beforeEachグローバル フロント ガード。ルート ジャンプ前にトリガーされ、

毎回ナビゲーション

でトリガーされます。

router.beforeEach

を通じてグローバル beforeEach ガードを登録します。

#パラメータvue-router にはいくつかのフックがあります

beforeEach

グローバル フロント ガードは、次の 3 つのパラメータを受け取ります。 Route

: 進入しようとしているターゲット ルート オブジェクト

from: Route
    : 現在のナビゲーションが出発しようとしているルート オブジェクト
  • next: Function
  • : このメソッドを呼び出す必要があります。そうしないと、ルーティングがブロックされます。
  • 注:
  • next パラメータを追加する必要はありませんが、追加したら一度呼び出す必要があります。そうしないと、ルーティング ジャンプなどが停止します。 。

next() メソッドのいくつかの状況

next():

パイプラインの次のフックに進みます。

next(false):
    現在のナビゲーションを中断します。
  • from ルートに対応するアドレスに戻ります。
  • next('/') または next({ path: '/' }): 別のアドレスにジャンプします。渡せるパラメータは router と同じです.push オプションは同じです。
  • next(error): ナビゲーションが終了し、エラーが router.onError() 登録されたコールバックに渡されます。
  • 最初の 2 つのパラメータを出力して見てみましょう。これらにはパス、パラメータ、メタ情報などが含まれています。
  • #戻り値

vue-router にはいくつかのフックがありますfalse

: 現在のナビゲーションをキャンセルします。

null、未定義、true、または直接戻り

: 次のナビゲーション ガードを呼び出します。
  • 複数のガードの定義
  • 複数のグローバル フロント ガードを定義し、作成順序に従ってそれらを呼び出すことができます。すべてのガードが完了するまでナビゲーションは保留されます。
  • 次の例では、2 つの
beforeEach

グローバル プレガードを定義します。 2 つのログが 2 秒後に出力された後にのみページ ジャンプが発生していることがわかります。

beforeEach

グローバル フロント ガードを除き、他のグローバル ガードは複数回定義でき、ナビゲーションが待機中です。すべてのガードが完了するまで、他のフック機能は発揮されません。 vue-router にはいくつかのフックがあります

vue-router にはいくつかのフックがありますbeforeResolve

グローバル解像度ガード、ルーティング ジャンプの前、すべての

内部ガード

は非同期です。コンポーネント は解析後にトリガーされますが、 各ナビゲーション 中にもトリガーされます。

router.beforeResolve を通じてグローバル解像度ガードを登録します。

router.beforeResolve((to, from, next) => {
  next();
})
ログイン後にコピー

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

afterEach

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

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

vue-router にはいくつかのフックがあります

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

路由守卫

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

beforeEnter

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

vue-router にはいくつかのフックがあります

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

组件守卫

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

beforeRouteEnter

vue-router にはいくつかのフックがあります

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

参数包括 tofromnext

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

beforeRouteUpdate

vue-router にはいくつかのフックがあります

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

beforeRouteLeave

vue-router にはいくつかのフックがあります

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

总结

完整的导航解析流程

  • 导航被触发。

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

  • 调用全局的 beforeEach 守卫。

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

  • 在路由配置里调用 beforeEnter

  • 解析异步路由组件。

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

  • 调用全局的 beforeResolve 守卫。

  • 导航被确认。

  • 调用全局的 afterEach 钩子。

  • 触发 DOM 更新。

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

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

vue-router にはいくつかのフックがあります

【相关推荐:《vue.js教程》】

以上がvue-router にはいくつかのフックがありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue アプリケーションで vue-router エラー「NavigationDuplicated: 現在の場所への冗長なナビゲーションを回避しました」が発生しました。これを解決するにはどうすればよいですか? Vue アプリケーションで vue-router エラー「NavigationDuplicated: 現在の場所への冗長なナビゲーションを回避しました」が発生しました。これを解決するにはどうすればよいですか? Jun 24, 2023 pm 02:20 PM

Vue アプリケーションで vue-router エラー「NavigationDuplicated:Avoidedredundantnavigationtocurrentlocation」が発生しました – 解決方法は? Vue.js は、高速で柔軟な JavaScript フレームワークとして、フロントエンド アプリケーション開発でますます人気が高まっています。 VueRouter は、ルーティング管理に使用される Vue.js のコード ライブラリです。ただし、場合によっては、

Vue ルーティングについて詳しく説明した記事: vue-router Vue ルーティングについて詳しく説明した記事: vue-router Sep 01, 2022 pm 07:43 PM

この記事では、Vue ファミリー バケットの Vue-Router について詳しく説明し、ルーティングに関する関連知識について学びます。

Vue と Vue-Router: コンポーネント間でデータを共有するにはどうすればよいですか? Vue と Vue-Router: コンポーネント間でデータを共有するにはどうすればよいですか? Dec 17, 2023 am 09:17 AM

Vue と Vue-Router: コンポーネント間でデータを共有するにはどうすればよいですか?はじめに: Vue は、ユーザー インターフェイスを構築するための人気のある JavaScript フレームワークです。 Vue-Router は Vue の公式ルーティング マネージャーであり、シングルページ アプリケーションの実装に使用されます。 Vue アプリケーションでは、コンポーネントはユーザー インターフェイスを構築するための基本単位です。多くの場合、異なるコンポーネント間でデータを共有する必要があります。この記事では、Vue と Vue-Router でデータ共有を実現するのに役立ついくつかの方法を紹介します。

Vue アプリケーションで vue-router を使用するときに「エラー: 無効なルート コンポーネント: xxx」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vue-router を使用するときに「エラー: 無効なルート コンポーネント: xxx」という問題を解決するにはどうすればよいですか? Jun 25, 2023 am 11:52 AM

Vue は、開発者が効率的で再利用可能な Web アプリケーションを迅速に構築できるようにする人気のフロントエンド フレームワークです。 Vue-router は、開発者がアプリケーションのルーティングとナビゲーションを簡単に管理できるようにする Vue フレームワークのプラグインです。ただし、Vue-router を使用すると、「エラー:無効なルートコンポーネント:xxx」という一般的なエラーが発生することがあります。この記事では、このエラーの原因と解決策について説明します。理由はヴにある

Vue アプリケーションで vue-router を使用するときに「エラー: 現在の場所への冗長なナビゲーションを回避しました」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vue-router を使用するときに「エラー: 現在の場所への冗長なナビゲーションを回避しました」という問題を解決するにはどうすればよいですか? Jun 24, 2023 pm 05:39 PM

Vue アプリケーションで vue-router を使用すると、「エラー: 現在の場所への冗長ナビゲーションを回避しました」というエラー メッセージが表示されることがあります。このエラー メッセージは、「現在の場所への冗長なナビゲーションを回避する」ことを意味し、通常は同じリンクを繰り返しクリックするか、同じルーティング パスを使用することによって発生します。では、この問題をどうやって解決すればよいでしょうか?ルーターを定義するときは正確な修飾子を使用してください

Vue-Router: ルーティング メタ情報を使用してルートを管理するにはどうすればよいですか? Vue-Router: ルーティング メタ情報を使用してルートを管理するにはどうすればよいですか? Dec 18, 2023 pm 01:21 PM

Vue-Router: ルーティング メタ情報を使用してルートを管理するにはどうすればよいですか?はじめに: Vue-Router は Vue.js の公式ルーティング マネージャーであり、シングルページ アプリケーション (SPA) を迅速に構築するのに役立ちます。一般的なルーティング機能に加えて、Vue-Router はルーティングを管理および制御するためのルーティング メタ情報の使用もサポートしています。ルーティング メタ情報はルートに付加できるカスタム属性であり、特別なロジックや権限制御の実装に役立ちます。 1. ルーティングメタ情報とは何ですか?ルーティングメタ情報は、

Vue アプリケーションで vue-router を使用するときに「エラー: 非同期コンポーネントの解決に失敗しました: xxx」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vue-router を使用するときに「エラー: 非同期コンポーネントの解決に失敗しました: xxx」という問題を解決するにはどうすればよいですか? Jun 24, 2023 pm 06:28 PM

vue-router の使用は、Vue アプリケーションでルーティング制御を実装する一般的な方法です。ただし、vue-router を使用すると、非同期コンポーネントの読み込みエラーが原因で、「エラー: Failedtoresolveasynccomponent:xxx」というエラーが発生することがあります。この記事では、この問題を調査し、解決策を提供します。非同期コンポーネントの読み込みの原理を理解する Vue では、コンポーネントを同期または非同期で作成できます。

Vue エラーの解決: ルート ジャンプに vue-router を正しく使用できません Vue エラーの解決: ルート ジャンプに vue-router を正しく使用できません Aug 17, 2023 pm 10:29 PM

Vue エラーの解決: ルート ジャンプに vue-router を正しく使用できません Vue を使用してフロントエンド プロジェクトを開発するとき、ページ ルーティング ジャンプに vue-router をよく使用します。ただし、vue-router を使用するときにエラーが発生し、ルートが正常にジャンプできない場合があります。この記事では、この質問に答え、対応する解決策を示します。まず、vue-router を使用する前に、vue-rou が正しくインストールされていることを確認する必要があります。

See all articles