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 データベース アーキテクチャの詳細

推薦する

Linux での JDK と Tomcat のアップロードと設定に関する詳細なチュートリアル

準備1. 仮想マシンを起動する2. gitツールルートアカウントでログインルートアカウントを使用して...

JavaScript配列の一般的なメソッドの例のまとめ

目次一般的な配列メソッドconcat() メソッドjoin() メソッドpop() メソッドpush...

JSネイティブ2列シャトル選択ボックスの実装例

目次いつ使うか構造的ブランチコードいつ使うか選択動作を完了するには、2 つの列間で要素を直感的に移動...

JavaScriptは両端キューを実装する

この記事の例では、両端キューを実装するためのJavaScriptの具体的なコードを参考までに共有して...

Linux サーバーでフォルダー、ファイル、解凍コマンドを削除する方法

1. フォルダを削除する例: rm -rf /usr/java /usr/javaディレクトリとその...

Dockerはコンテナにポートを動的に公開します

コンテナのIPアドレスを表示するdocker examine <コンテナ名またはID> ...

Apache ストレステストツールのインストールと使用

1. ダウンロードApacheの公式サイトhttp://httpd.apache.org/にアクセス...

高性能ウェブサイトの最適化ガイド

パフォーマンスの黄金律:エンドユーザーの応答時間のわずか 10% ~ 20% が HTML ドキュメ...

Webフロントエンド開発コース Webフロントエンド開発ツールとは

インターネット技術の発展に伴い、ユーザーはますます Web ページに依存するようになり、Web フロ...

Linux システムで .sh ファイルを実行する方法

Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...

Vue のプロダクション環境と開発環境を切り替えてフィルターを使用する方法

目次1. 本番環境と開発環境を切り替える最初の方法: .envファイルを設定する2番目の方法2. フ...

CentOS7にPHP7 Redis拡張機能をインストールする方法

導入前回の記事では、Redis をインストールして設定しましたが、まだ終わりではありません。PHP ...

ウェブフロントエンドコードを書く際の考慮事項のまとめ

1. HTMLタグの前に次のような文を追加するのが最適です。 <!DOCTYPE HTML P...

MySQLデータを復元する2つの方法

1. はじめに少し前、開発者がテスト環境や本番環境で誤った操作をし、データベースを誤って削除/更新し...