【Vue.js】Routerでルーティングする~その3~

前回までの記事はこちら↓

スポンサーリンク

グローバルビフォーガード

全てのページ遷移に特定の処理を施すことが可能。
main.jsでimportしたrouter.jsに.beforeEachを使って、実装を行う。

router.beforeEach(() => {
})

.beforeEach には3つの引数を取ることができる。

router.beforeEach((to,from,next) => {
})

to,fromは、現在の$routeの状態を表すルートオブジェクト。
.beforeEachは、最後に必ずnext関数を記載する必要がある。記載しないと、次に進まず真っ白い画面のままになってしまう。

router.beforeEach((to,from,next) => {
  next();
})

特定のページ遷移前にナビゲーションガードを加える

特定のページ遷移前にナビゲーションガードをつける場合は、router.jsの各pathにbeforeEnterを使って記載していく。

グローバルでは、beforeEachだったが、今回はbeforeEnterなので注意。

beforeEnter(to,from,next){
     next(false);
}

beforeEachと同様に引数を取ることができる。
pathを含んだコードはこちら↓

routes: [
   {
    path: '/home', components: {
         default: Home,
         header: HeaderHome
    },
    beforeEnter(to,from,next){
         next(false);
    }
}]

コンポーネントにナビゲーションガードを加える

ルートコンポーネントに付けることができる。
※routerに設定されて動かされるコンポーネント

コンポーネントに付けることができるナビゲーションガードは3種類ある。

beforeRouteEnter(to, from, next) {
    next();
},
beforeRouteUpdate(to, from, next) {
    next();
},
beforeRouteLeave(to, from, next) {
    next();
}

beforeRouteEnter…コンポーネントが表示される時に実行される。
beforeRouteUpdate…ルートが変わった時に実行される。※例えば、/home/1から/home/2に変わった時
beforeRouteLeave…コンポーネントのルートから離れた時に実行される。

コンポーネントの読み込みを遅らせる

コンポーネントが膨大になった場合、アクセス時のページ読み込みがかなり遅くなる。(一気にすべてローディングを行うため)
これを回避するために、ローディングの読み込みを遅らせることができる。

コンポーネントの読み込みを行っているwebpackに、必要な時に読み込みがされるように命令をかく。

const Home = () => import("./views/Home.vue");

networkのnameが自動連番されてしまう。命名したい時は、コメントを追記する。
/* webpackChunkName:“Home” */

const Home = () => import(/* webpackChunkName:"Home" */"./views/Home.vue");

Vue CLI3は、prefetchが走るため、responseが暇な時に必要そうなパーツを読み込んで、キャッシュで持っておく仕組みがある。

タイトルとURLをコピーしました