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 の使い方の詳細な説明

推薦する

HTML テーブルタグと関連する改行の問題の詳細な分析

テーブルとは何ですか?テーブルは、データのキャリアである HTML テーブルです。以下は比較的標準的...

MySQL パフォーマンス最適化のヒント

MySQL パフォーマンスの最適化MySQL はインターネット企業で広く使用されており、MySQL ...

JavaScript で配列遅延評価ライブラリを実装する方法

目次概要達成方法具体的な実装評価関数の終了を決定する生成関数の範囲変換関数マップフィルター割り込み機...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

効率を向上できる Linux コマンドエイリアス 10 個のまとめ

序文Linux 環境で作業するエンジニアは、これらの面倒な命令とパラメータのコマンドラインにきっと驚...

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web ...

Vueは開始時間と終了時間の範囲クエリを実装します

この記事では、Vueで開始時間と終了時間の範囲を照会する方法を参考までに紹介します。具体的な内容は次...

MySQL 8.0.18コマンドの詳細な説明

解凍したフォルダ C:\web\mysql-8.0.11 を開き、フォルダ内に my.ini 構成フ...

mysql 5.7.18 winx64 無料インストール設定方法

1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...

2時間のDocker入門チュートリアル

目次1.0 はじめに2.0 Dockerのインストール3.0基本的なDockerコマンド4.0 Do...

JS+AJAX は、州、市、地区のドロップダウン リストのリンクを実現します。

この記事では、州、市、地区のドロップダウンリストのリンクを実現するためのJS + AJAXの具体的な...

MySQLデータベースを定期的に自動バックアップする方法

データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...

アリババの中秋節ロゴとウェブサイトのデザインプロセス

<br />まずアイデアを考え、次にスケッチを描き、次にマウスでスケッチし、最後にフラッ...

Centos7でポートを開く方法

CentOS7 のデフォルトのファイアウォールは iptables ではなく、firewalle で...

MySQL マスタースレーブ同期、トランザクションロールバックの実装原理

ビンログBinLog は、データベース テーブル構造の変更 (テーブルの作成、変更など) とテーブル...