Vue では、ルーティングはページ間のジャンプやナビゲーションを制御する非常に重要な部分です。実際の開発では、ログインしているときだけアクセスできるようにする、アクセスには管理者権限が必要など、特定の経路を制御する必要があることがよくあります。現時点では、ルーティング ナビゲーション ガードを使用してルーティング制御を実装する必要があります。
ルート ナビゲーション ガードは、ルート ジャンプを傍受し、ルート ジャンプの前後にいくつかの操作を実行できます。 Vue では、ルーティング ナビゲーション ガードは通常、グローバル ナビゲーション ガードとコンポーネント内ナビゲーション ガードを使用して実装されます。以下では、これら 2 つの方法をそれぞれ使用する方法を紹介します。
1. グローバル ナビゲーション ガード
グローバル ナビゲーション ガードはグローバル ルーティングを制御でき、通常は Vue インスタンスに登録されます。グローバル ナビゲーション ガードには 3 つのフック関数が含まれています:
この関数はルートがジャンプする前に実行され、3 つのパラメーターを受け取ります。
beforeEach 関数でルートを判断し、条件を満たしていればジャンプを続け、条件を満たしていない場合は次のメソッドを使用してインターセプトまたはリダイレクトします。たとえば、ログインするかどうかを決定するには:
router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !store.state.isAuthenticated) { next('/login') } else { next() } })
この関数は、ルートがジャンプした後に実行され、2 つのパラメーターを受け取ります。
router.afterEach((to, from) => { // 记录访问记录 })
{ path: '/dashboard', component: Dashboard, beforeEnter: (to, from, next) => { if (store.state.isAdmin) { next() } else { next('/login') } } }
たとえば、この関数を使用して動的ルートを作成できます:
{ path: '/user/:id', component: User, beforeEnter: (to, from, next) => { api.getUser(to.params.id) .then(user => { to.meta.user = user next() }) .catch(error => { next('/error') }) } }
beforeRouteLeave(to, from, next) { if (this.formDirty) { if (confirm('您是否要保存数据?')) { this.saveData() next() } else { next(false) } } else { next() } }
以上がVue でルート ナビゲーション ガードを使用してルート ジャンプを制御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。