この記事では、vue2.0のナビゲーションガード(ルートガード)を実装するための関連知識を中心に紹介します。vue-routeが提供するbeforeRouteUpdateを使えば簡単にナビゲーションガード(navigation-guards)を実装できます
ルートジャンプ。ログイン検証などの事前検証を行うことは、Web サイトでは一般的な要件です。
この点、vue-routeが提供するbeforeRouteUpdateでは簡単にナビゲーションガード(navigation-guards)を実装できます。
navigation-guards という名前は奇妙に聞こえますが、公式ドキュメントではこのように翻訳されているため、そう呼ぶことにします。
ドキュメントのアドレスを貼り付けます: https://router.vuejs.org/zh-cn/advanced/navigation-guards.html
グローバル ガード
router.beforeEach を使用してグローバル プレガードを登録できます。
const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... })
ナビゲーションがトリガーされると、グローバル フロント ガードが作成順に呼び出されます。ガードは非同期で解析および実行されます。現時点では、ナビゲーションはすべてのガードが解決されるまで待機します。
各ガードメソッドは 3 つのパラメータを受け取ります:
to: Route: 進入しようとしているターゲットルートオブジェクト
from: Route: 現在のナビゲーションが退出しようとしているルート
next: Function: このメソッドこのフックを解決しましょう。実行効果は、次のメソッドの呼び出しパラメータによって異なります。
next(): パイプラインの次のフックに進みます。すべてのフックが実行されると、ナビゲーションのステータスが確認されます。
next(false): 現在のナビゲーションを中断します。ブラウザの URL が変更されると (おそらくユーザーが手動で、またはブラウザの [戻る] ボタンによって)、URL アドレスは from ルートに対応するアドレスにリセットされます。
next('/') または next({ path: '/' }): 別のアドレスにジャンプします。現在のナビゲーションが中断され、新しいナビゲーションが開始されます。
next(error): (2.4.0+) next に渡されたパラメータが Error インスタンスの場合、ナビゲーションは終了し、エラーは router.onError() によって登録されたコールバックに渡されます。
必ず次のメソッドを呼び出してください。そうしないとフックが解決されません。
以下に例を書きます:
ログイン状態を判断する必要がある「ルートコレクション」をリストします。 コレクション内のルートにジャンプするときに、「ログイン状態ではない」場合は、ログインページ LoginPage にジャンプします。
ログインページLoginPageに直接入る場合、「ログイン中」であればホームページHomePageにジャンプしますimport Vue from 'vue'; import Router from 'vue-router'; import LoginPage from '@/pages/login'; import HomePage from '@/pages/home'; import GoodsListPage from '@/pages/good-list'; import GoodsDetailPage from '@/pages/good-detail'; import CartPage from '@/pages/cart'; import ProfilePage from '@/pages/profile'; Vue.use(Router) const router = new Router({ routes: [ { path: '/', // 默认进入路由 redirect: '/home' //重定向 }, { path: '/login', name: 'login', component: LoginPage }, { path: '/home', name: 'home', component: HomePage }, { path: '/good-list', name: 'good-list', component: GoodsListPage }, { path: '/good-detail', name: 'good-detail', component: GoodsDetailPage }, { path: '/cart', name: 'cart', component: CartPage }, { path: '/profile', name: 'profile', component: ProfilePage }, { path: '**', // 错误路由 redirect: '/home' //重定向 }, ] }); // 全局路由守卫 router.beforeEach((to, from, next) => { console.log('navigation-guards'); // to: Route: 即将要进入的目标 路由对象 // from: Route: 当前导航正要离开的路由 // next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。 const nextRoute = ['home', 'good-list', 'good-detail', 'cart', 'profile']; let isLogin = global.isLogin; // 是否登录 // 未登录状态;当路由到nextRoute指定页时,跳转至login if (nextRoute.indexOf(to.name) >= 0) { if (!isLogin) { console.log('what fuck'); router.push({ name: 'login' }) } } // 已登录状态;当路由到login时,跳转至home if (to.name === 'login') { if (isLogin) { router.push({ name: 'home' }); } } next(); }); export default router;
Vue ベースの遅延読み込みプラグイン vue の紹介-view-lazy
以上がvue2.0 はナビゲーション ガード (ルーティング ガード) を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。