vue-routerフック関数はルーティングガードを実装します

vue-routerフック関数はルーティングガードを実装します

概要

ルートガードとは何ですか?ルート ガードは、リクエストが送信される前にそれをインターセプトし、リクエストを送信する前に何かを行う Ajax リクエスト インターセプターに少し似ています。ここでのルート ガードは同様の意味を持ちます。簡単に言えば、ルートに入る前に停止してチェックするということです。これは中学校の門の警備員のようなものでしょうか。入場前に停止し、学生証を持っている場合は入場を許可しますが、学生証を持っていない場合は入場を許可しません。もちろん、ルーティング ガードは入場前に停止するだけでなく、他の操作を実行するためのフック関数もあります。

Vue-router は、ルーティングガードを実装するための 3 種類のフック関数を提供します。

1. グローバルフック関数(beforeEach、afterEach)

2. ルーティング固有のフック関数(beforeEnter)

3. コンポーネント内のフック関数(beforeRouterEnter、beforeRouterUpdate、beforeRouterLeave)

まず、グローバル フック関数を見てみましょう。

グローバルフック関数

それぞれの前:

beforeEach は、to、from、next の 3 つのパラメータを受け取ります。to: 入るルート オブジェクト。from: 出るルート オブジェクト。next: ルートの制御パラメータ。

次に呼び出す方法は 4 つあります。

next(): すべてがうまくいけば、このメソッドを呼び出して次のフックに入ります。

next(false): ルートナビゲーションをキャンセルします。この時のURLはこれから出発するルートアドレスを表示します。

next('/login'): 現在のルートを終了し、新しいルートナビゲーションに入ります(ルートアドレスは自由に指定できます)

next(error): ルートナビゲーションが終了し、router.onError() によって登録されたコールバックにエラーが渡されます。

通常、ログインせずにページに入るときにログイン ページにジャンプする、現在のページにアクセスするためにユーザーが到達する必要があるレベルなど、権限を制御するためにグローバル フックを使用します。これらはすべてページ権限の制御であり、beforeEach フック関数を通じて実現できます。

main.js (グローバル フック関数は通常 main.js に記述されます):

// ルートに入る前のメソッドフック router.beforeEach((to, from, next) => {
  console.log(to, '最初のパラメータを先頭に追加')
  console.log(from, '2番目のパラメータを先頭に追加')
  console.log(次に、'3番目のパラメータを先頭に追加')
  /
    ソースルートからターゲットルートへ、次のルートへジャンプ*/
//ここでは、local と storange を使用して権限の検証をシミュレートします if (window.localstorange.getItem("token")) {
    // 存在する場合は、対応するルートに直接ジャンプします next();
  } それ以外 {
    // 存在しない場合はログインページに移動します next('/login');
  }
});

それぞれの後:

AfterEach は beforeEach と同様にグローバル ガード フックであり、main.js で呼び出されます。AfterEach には beforeEach よりも 1 つ少ない next パラメータがあります。

from: 出発しようとしているルート オブジェクト。

afterEach() は通常、ページのスクロール バーの位置をリセットするために使用されます。

非常に長いページがあり、その中の特定の位置までスクロールすると、新しいページのスクロール バーの位置は前のページがあった位置になります。このとき、afterEach を使用してリセットできます。

//グローバルルート変更フック router.afterEach((to, from) => {
  //スクロールバーを一番上に戻します。window.scrollTo(0, 0);
})

ルーティング固有のフック関数

前入力:

名前が示すように、指定されたルートにのみこれらのフック関数があります。通常、これらのフック関数はルート設定ファイルで設定します。変更前のフックのみ設定でき、変更後のフックは設定できません。

const ルーター = 新しい VueRouter({
    ルート
});
定数ルート = [
    {
        パス:'/page1',
        コンポーネント:ページ1、
        子供たち: [
            {
                パス: "電話",
                コンポーネント: 電話
            },
            {
                パス: "コンピュータ",
                コンポーネント: コンピュータ
            },
        ]、
//ルート限定フック関数 beforeEnter:(to,from,next)=>{
            console.log(に);
            console.log(から);
            次へ(偽);
        }
    },

上記のコードは、beforeEnter フックが /page1 に入ったときにのみトリガーされることを意味します。他のページに入った場合はトリガーされません。

コンポーネント内のフック関数

beforeRouteEnter(to,from,next):

ルートに入る前に呼び出されます。この時点では Vue インスタンスが作成されていないため、beforeEnter はこれを使用できない唯一のフック関数です。

to: 入力するルート オブジェクト。

from: 出発しようとしているルート オブジェクト。

次へ: ルーティング制御パラメータ

ルート更新前(to、from、next):

前回の記事で説明した動的ルート パラメータ転送など、ルートが変更されたときに呼び出されます。この場合は beforeRouteUpdate も呼び出されます。

to: 入力するルート オブジェクト。

from: 出発しようとしているルート オブジェクト。

次へ: ルーティング制御パラメータ。

ルート出発前(出発地、出発地、次):

ルートがコンポーネントを離れるときに呼び出されます。

to: 入力するルート オブジェクト。

from: 出発しようとしているルート オブジェクト。

次へ: ルーティング制御パラメータ

注: beforeRouteEnter がトリガーされたときに vue インスタンスが作成されていないため、このフック関数では使用できませんが、beforeRouteUpdate と beforeRouteLeave は、これら 2 つの関数がトリガーされたときにインスタンスが作成されているため、インスタンスにアクセスできます。

コンポーネント内でフック関数を呼び出す場合、通常はコンポーネント内で呼び出します。例:

<テンプレート>
    <div>
        <h1 id="h1">ホーム</h1>
        <p>
            <router-link to="/page1/phone">携帯電話</router-link>
            <router-link to="/page1/computer">コンピュータ</router-link>
        </p>
        <ルータービュー></ルータービュー>
    </div>
</テンプレート>
<スクリプト>
    エクスポートデフォルト{
    //ルートに入る前に呼び出す beforeRouteEnter (to, from, next) {
    window.document.title = "ようこそ";
    次();
  },
    //ルートが変更されたときにbeforeRouteUpdate(to,from,next)を呼び出す{

  },
   //ルートが出発するときに呼び出されます beforeRouteLeave(to,from,next){

  },
        データ () {
            戻る {
                メッセージ: 「私はページ1コンポーネントです」
            }
        },
    }
</スクリプト>

上記はルーティングガードを実装するためのvue-routerフック関数の詳細です。vue-routerルーティングガードの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vue ブラウザのバックが beforeRouteLeave をトリガーできない問題を解決する
  • vue ルーターナビゲーションガード (router.beforeEach()) の使用に関する詳細な説明
  • vue-routerのbeforeRouteUpdateでは問題は発生しない

<<:  Linux で Squid プロキシ サーバーを構築するための完全な手順

>>:  mysql バックアップ スクリプト mysqldump の使い方の詳細な説明

推薦する

Linuxのwatchコマンドの使用

1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...

VMware仮想マシンブリッジによるインターネット相互接続を実現する方法

VMware をインストールして新しい仮想マシンを作成したら、オプション バーの [編集] - [仮...

Dockerでnginxをデプロイし、設定ファイルを変更する方法

Dockerでnginxをデプロイするのはとても簡単ですたった 1 行のコマンド: docker 実...

Linux での fuser コマンドの使用法の詳細な説明

説明する: fuser は、現在ディスク上のファイル、マウント ポイント、さらにはネットワーク ポー...

HTML ではスペースはどのように表現されますか (どのような意味ですか)?

Web 開発では、次のような文字によく遭遇します: &nbsp;これは実際には HTML が...

MySQL デッドロックのトラブルシューティングの全プロセス記録

【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...

さまざまなReact状態マネージャーの解釈と使用方法

まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...

Vue 3.0 カスタムディレクティブの使い方

目次1. カスタム指示1. グローバルカスタム指示を登録する2. グローバルカスタム指示を使用する3...

Linux で特定のユーザーにフォルダーのすべてのコンテンツを許可するにはどうすればよいですか?

【問題分析】 chown コマンドを使用できます。ここで ch は change (変更) を表し...

Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...

グリッド共通レイアウトの実装

両側に隙間なし、各列間に隙間あり 幅: 100%; 表示: グリッド; グリッドテンプレート列: r...

Ubuntu 20.04 中国語入力方法のインストール手順

この記事では、Google 入力方法をインストールします。実は以前はSogou入力方式を使っていたの...

Linuxのwhichコマンドの具体的な使い方

Linux でファイルを見つけたいのに、その場所がわからないことがよくあります。次のコマンドを使用し...

ミニプログラムでマインドマップを描く方法

目次マインドマップとは何ですか? F6で描く方法アリペイ微信要約するマインドマップとは何ですか?マイ...

MySQLクエリデータを時間別に表示します。データがない場合は0を入力してください。

需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...