目次
序文
この記事では、Vue2 の最後の知識ポイント、Vue のルーティング ガードについて紹介します。つまり、認証です。すべてのコンポーネントに誰でもアクセスできるわけではなく、アクセス許可が必要です。アクセス許可に基づいてルーティング コンポーネントを表示するには、ルーティング ガードが必要です。
(この記事は前回の記事のコードをベースにしています)
グローバルフロントルートガード
グローバル フロント ルーティング ガードは、作成されたルーターと公開されたルーターの間に書き込まれます。
router.beforeEach(コールバック)
コールバック関数には、通常の関数またはアロー関数を使用できます。
コールバック関数には 3 つのパラメータがあります
from : ルーティング オブジェクト、どこから来たのか、開始点を示します
to : 行き先と終点を示すルーティング オブジェクト
next : これは関数であり、呼び出した後は解放を意味し、そのまま下に降りることができます。
router.beforeEach((to,from,next)=>{})
このコールバック関数は、初期化中に1 回呼び出され、ルーティング コンポーネントを切り替える前に毎回呼び出されます。
簡単な例
router.beforeEach((to,from,next)=>{ let user = 'zzz' if(to.meta.isAuth) { if(user=='admin') { next() } else { alert('你没有权限') } } else { next() } })
ルーティング対象は認証が必要かどうかを頻繁に判断する必要があるためです。
したがって、コードの冗長性はルーティング オブジェクトにカスタム属性を追加することで解決できます。
ルーティング オブジェクトにカスタム属性を追加するには、ルーティング オブジェクトのメタで定義する必要があります。
上記のコードにより、認証機能を簡単に実現し、ユーザー名を判断し、表示ルーティング コンポーネントを解放するかどうかを決定できます。
グローバルポストルートガード
グローバル ポスト ルート ガードはグローバル プレ ルート ガードと同じであり、どちらもルーターの作成とルーターの公開の間に書き込まれます。
router.afterEach((to,from)=>{})
to と from の 2 つのパラメータは、グローバル フロント ガードと同じです。
違いは、
グローバル フロント ルート ガードは初期化中にコールバックを 1 回呼び出し、コールバック関数はルーティング コンポーネントを切り替える前に1 回呼び出されます。
グローバル ポストルーティング ガードは、初期化中に 1 回、ルーティング コンポーネントの切り替え後に1 回、コールバックを呼び出します。
// 全局后置守卫 router.afterEach((to,from)=>{ console.log(to); console.log(from); })
ローカルルートガードのパスガード
ローカル ルート ガード、個々のコンポーネントの認証
コードはルートルーティングオブジェクトに記述されます
beforeEnter(){}
コールバック関数はありません
関数として理解できる
3 つのパラメータ
へ、から、次へ
beforeEnter(to,from,next){ let user = 'admin' if(user=='admin') { next() } else { alert('你没有权限') } }
部分配線ガード コンポーネントガード
コンポーネント ガードはルーティング コンポーネント用であり、ルーティング コンポーネントにのみ有効です。
コードはルーティングコンポーネントに記述されます
ルーティングコンポーネントに入る前に実行します。
beforeRouteEnter(to,from,next){}
ルーティング コンポーネントを離れる前に実行します。
beforeRouteLeave(to,from,next){}
beforeRouteEnter(to,from,next){ console.log(to); next() }, beforeRouteLeave(to,from,next){ console.log(from); next() }
タイムライン上で実行する
beforeRouteEnter の to と beforeRouteLeave の from はオブジェクトを指します