Vue でのルーティングガードの具体的な使用法

Vue でのルーティングガードの具体的な使用法

機能: ルートの権限を制御する

カテゴリ: グローバルガード、専用ガード、コンポーネントガード

1. グローバルガード

1.1 グローバルフロントガード

名前が示すように、プリガードは主に、ルートをジャンプする前に、ステータスに基づいて一連の操作を実行することです(グローバルプリガードは、ルートが初期化されてジャンプする前にトリガーされます)。

router.beforeEachを使用してグローバル プリガード (Each: each、つまり、ルートがジャンプするときにトリガーされます) を登録できます。

各ガード メソッドは次の 3 つのパラメータを受け取ります。

to:Route : ターゲットに入ろうとしているルートオブジェクト

from:Route : 現在のナビゲーションがこれから出発するルート

next:function : このフックを解決するには、このメソッドを呼び出す必要があります。実行効果は次のメソッドの呼び出しパラメータに依存する

1. next() : パイプラインの次のフックに移動します (to)。フックが実行されると、ナビゲーション状態が確定します。

2. next(false) : 現在のナビゲーションを中断します。ブラウザの URL が変更された場合 (ユーザーが手動で変更した場合や、ブラウザの戻るボタンを押した場合など)、アドレスは from ルートに対応するアドレスにリセットされます。

3. next('/")またはnext({path:'/'}) : 同じアドレスにジャンプします。現在のナビゲーションが中断され、新しいナビゲーションが作成されます。 next には任意のオブジェクトを渡すことができ、replace:true、name:'home' などのオプションや、router-link の任意のオプションを prop または router.push に設定できます。

特定のナビゲーション ガードで、次の関数が 1 回だけ呼び出されるようにしてください。この関数は複数回出現できますが、すべてのロジック パスが重複していない場合に限られます。重複していない場合、フックは解決されないか、エラーが発生します。

1.1.1 使用方法

開始、終了、次へを印刷して、保存される情報を確認できます。

'vue' から Vue をインポートします
'vue-router' から VueRouter をインポートします。
'../views/Home.vue' から Home をインポートします。
'../views/About.vue' から About をインポートします。
'../views/News.vue' から News をインポートします。
'../views/Message.vue' からメッセージをインポートします。
 
Vue.use(VueRouter)
 
const ルート = [{
    パス: '/home',
    名前: 'ホーム'、
    コンポーネント: ホーム、
    子供たち:[
      {
        パス: 'message', // 書き込まないでください: /news
        コンポーネント: メッセージ
      }
    ]
  },
  {
    パス: '/about',
    名前: 'aboutName',
    コンポーネント: について、
    children: [{ //children を通じて子ルーティングを構成する path: 'news', //ここには書かないでください: /news
      コンポーネント: ニュース
    }]
  }
]
 
const ルーター = 新しい VueRouter({
  ルート
})
 
//グローバル フロント ルーティング ガード---初期化時およびルートが切り替えられるたびに呼び出されます router.beforeEach((to, from, next) => {
  console.log(に);
  //これは簡単な例です //つまり、ユーザーが認証を必要とするルートに入ったかどうかを判断します (ここでの距離はニュースとメッセージです)
  to.path == '/home/message' || to.path === '/about/news' の場合 {
    //入力した場合、情報がローカルにキャッシュされているかどうかを判断します(ここではログイントークンをシミュレートします)
    if (localStorage.getItem('name') === 'haungzhizhen') {
      次()
    }
  }それ以外{
    //そうでない場合は、安心して next() を呼び出してください
  }
})
デフォルトルーターをエクスポートする

上記の例の欠点の 1 つは、認証が必要なルートが多数ある場合、それらを 1 つずつ判断する必要があることです。それは必要ないので、ここではルートの別の属性、つまり各ルートで設定できるメタを紹介します。これは通常、識別情報を使用して属性を識別するために使用され、次のように強制的に判断できます。

//メタを使用する
router.beforeEach((to, from, next) => {
  console.log(に);
  if (to.meta.isAuth){//認証が必要かどうかを判断if (localStorage.getItem('name') === 'haungzhizhen') {
      次()
    }
  } それ以外 {
    次()
  }
})

1.2 グローバルポストルートガード

//グローバルなポストルートガード --- 初期化中および各ルートの切り替え後に呼び出されます router.afterEach((to, from) => {
  if (to.meta.title) {
    document.title = to.meta.title || 'ルーティングジャンプの例' //Webページのタイトルを変更する
  }それ以外{
    ドキュメントのタイトル = 'vue_test'
  }
})

1.3 統合

2. ルーター固有のガード

ルート設定で beforeEnter ガードを直接定義できます。これらのパラメータは、グローバル before ガードのメソッド パラメータと同じです。

const ルーター = 新しい VueRouter({
  ルート: [
    {
      パス: '/foo',
      コンポーネント: Foo、
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

3. コンポーネント内のガード

最後に、ルート コンポーネント内で直接ルート ナビゲーション ガードを定義できます。

  • ルータに入る前
  • ルータ更新前
  • ルータが離れる前に
定数Foo = {
  テンプレート: `...`,
  beforeRouteEnter(to, from, next) {
    // このコンポーネントをレンダリングする対応するルートが確認される前に呼び出されます // いいえ!できる!コンポーネントインスタンス `this` を取得します。
    // ガードが実行される前にコンポーネントインスタンスが作成されていないため},
  ルート更新前(to、from、next) {
    // 現在のルートが変更されたがコンポーネントが再利用されたときに呼び出されます // たとえば、動的パラメータを持つパス /foo/:id の場合、/foo/1 と /foo/2 の間を移動すると、
    // 同じ Foo コンポーネントがレンダリングされるため、コンポーネント インスタンスが再利用されます。この場合、このフックが呼び出されます。
    // コンポーネントインスタンス `this` にアクセスできます
  },
  beforeRouteLeave(to, from, next) {
    // このコンポーネントの対応するルートから移動するときに呼び出されます // コンポーネントインスタンス `this` にアクセスできます
  }
}

Vue でのルーティング ガードの具体的な使用法に関するこの記事はこれで終わりです。Vue ルーティング ガードに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueルータールーティングガードの詳細な説明
  • Vue2.0はナビゲーションガード(ルートガード)を実装します
  • Vue のフック機能 (ルートナビゲーションガード、キープアライブ、ライフサイクルフック) の詳細な説明
  • Vue のルーティングガードとキープアライブライフサイクルの詳細な説明

<<:  CSS3でアニメーションを実装する3つの方法

>>:  MySQL データベース アーキテクチャの詳細

推薦する

Dockerはローカルディレクトリとデータボリュームコンテナ操作をマウントします

1. DockerはローカルディレクトリをマウントしますDocker は、ホスト上のディレクトリをイ...

3列レイアウトを実現するCSS3フレキシブルボックスフレックス

タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...

React ページ ターナーの実装 (フロント エンドとバックエンドを含む)

目次フロントエンド上記のアイデアに従って、ページめくり機能を設計して記述します。バックエンド(Jav...

RedHat 6.5 に MySQL 5.7 をインストールするための詳細なチュートリアル

RedHat6.5インストールMySQL5.7チュートリアル共有、参考までに、具体的な内容は次のとお...

ホストサービスにアクセスするDockerでのサービスの実装

目次1. シナリオ2. 解決策3. 結論4. 参考文献1. シナリオ日常の開発およびテスト作業には ...

VMware Workstation Pro 16 ライセンス キーと使用方法のチュートリアル

VMware Workstation は、開発、テスト、デモンストレーション、展開のために仮想マシン...

HTML ページジャンプコード

次のコードを index.html などのデフォルトのホームページ ファイルとして保存し、ルート デ...

MySQL 8.0.12 のインストールと設定方法のグラフィック チュートリアル (Windows10)

この記事は、参考のためにMySQL 8.0.12のインストールグラフィックチュートリアルを記録してい...

Linuxのtopコマンド出力の詳細な説明

序文皆さんは Linux で top コマンドを使ったことがあると思います。私は Linux に触れ...

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

mysql 5.7.18 winx64 パスワード変更

MySQL 5.7.18 が正常にインストールされた後、バージョン 5.7 では空のパスワードでのロ...

jsイベント委譲の詳細な説明

1. 各関数はオブジェクトであり、メモリを占有します。メモリ内のオブジェクトが増えるほど、パフォーマ...

熟練デザイナーの7つの原則(2):色の使い方

<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...

Linux userdel コマンドの使用法

1. コマンドの紹介userdel (ユーザー削除) コマンドは、ユーザー アカウントと関連ファイル...

Linux での VMWare15.5 のインストールに関するチュートリアル

Linux に VMWare をインストールするには、公式 Web サイト https://www....