概要ルートガードとは何ですか?ルート ガードは、リクエストが送信される前にそれをインターセプトし、リクエストを送信する前に何かを行う 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の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Linux で Squid プロキシ サーバーを構築するための完全な手順
>>: mysql バックアップ スクリプト mysqldump の使い方の詳細な説明
1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...
VMware をインストールして新しい仮想マシンを作成したら、オプション バーの [編集] - [仮...
Dockerでnginxをデプロイするのはとても簡単ですたった 1 行のコマンド: docker 実...
説明する: fuser は、現在ディスク上のファイル、マウント ポイント、さらにはネットワーク ポー...
Web 開発では、次のような文字によく遭遇します: これは実際には HTML が...
【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...
まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...
目次1. カスタム指示1. グローバルカスタム指示を登録する2. グローバルカスタム指示を使用する3...
【問題分析】 chown コマンドを使用できます。ここで ch は change (変更) を表し...
1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...
両側に隙間なし、各列間に隙間あり 幅: 100%; 表示: グリッド; グリッドテンプレート列: r...
この記事では、Google 入力方法をインストールします。実は以前はSogou入力方式を使っていたの...
Linux でファイルを見つけたいのに、その場所がわからないことがよくあります。次のコマンドを使用し...
目次マインドマップとは何ですか? F6で描く方法アリペイ微信要約するマインドマップとは何ですか?マイ...
需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...