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

推薦する

after疑似要素を使用して中空の三角矢印とXアイコンを実装する例

フロントエンドのデザイン案では、「X」や「>」の形をした閉じるボタンや、他の 3 方向の白抜き...

MySQLに絵文字表現を保存する詳細な手順

原因: java.sql.SQLException: 列の文字列値が正しくありません: '\...

初心者のためのウェブサイト構築入門 - ウェブサイト構築に必要な条件とツール

今日は、初心者の次のような質問に答えます。学ぶ勇気さえあれば、自分のウェブサイトを構築するのは簡単で...

エージェントを介したzabbix監視プロセスとポートの詳細なプロセス

環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...

MySQL 学習: 初心者のための 3 つのパラダイム

目次1. パラダイム基盤1.1 パラダイムの概念2. 3つの主要なパラダイム2.1 3つの主要なパラ...

IE7 互換モードで IE8 を有効にするコード

最も人気のあるタグはIE8ですブラウザベンダーはバージョンアップデートのリリースに躍起になっている一...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

優秀なウェブ開発者が開発スキルを向上させるために知っておくべき10のこと

「開発とは、単にコードを書くだけではない」というのは、3EV の Dan Frost 氏の言葉です。...

HTMLにおける絶対パスと相対パスの違いの分析

図に示すように: 1 つのページには多数のファイルが接続されているため、ファイルを参照するときには、...

Windows10にmysql5.7.18をインストールするチュートリアル

このチュートリアルでは、MySQL 5.7.18のインストールと設定方法を参考までに紹介します。具体...

シングルサインオン制御を実装するためのVueの完全なコード

参考までに、Vue シングル サインオンのデモをご紹介します。詳細を知りたい方のお役に立てれば幸いで...

ES6 の Set および WeakSet コレクションの詳細な説明

目次セットは値が重複しない特別なコレクションです。セットコレクション基本API独自の価値判断セットを...

集める価値のある 15 個の JavaScript 関数

目次1. 数字を逆にする2. 配列内の最大のn個の数値を取得する3. 階乗を計算する4. 現在の動作...

シンプルなアコーディオン効果を実現するjs

この記事では、アコーディオン効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

CentOS7 で jar アプリケーションの起動を設定する方法

プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...