サイトアイコン 上尾市のWEBプログラマーによるブログ

「これからはじめるVue.js実践入門」の感想・備忘録6

「これからはじめるVue.js実践入門」の感想・備忘録5の続き

Vue Router

Vue Routerの準備

npx vue create xxxでのプロジェクト作成時に有効にする。

ディレクトリ構成

コンポーネントのインポート

JavaScriptでのページ移動

ルートパラメータ

$routeオブジェクト経由でルートパラメータ渡す場合

この方法だとルーター経由でしか使えないコンポーネントとなってしまうため、後述するprops経由で渡す方法を使うべき。

1. ルート定義
2. コンポーネントでルートパラメータを受け取る

props経由でルートパラメータ渡す場合

1. src/router/index.jsでprops: true指定する。
{
  path: '/my-component3/:id?',
  name: 'my-component3',
  component: () => import(/* webpackChunkName: "my-component3" */ '../components/MyComponent3.vue'),
  props: true
}
2. コンポーネントでプロパティを定義する。
props {
  id: String
}
文字列以外のpropsを定義したい場合
props: route => ({
  id: Number(route.params.id),
  msg: route.params.msg
})
TypeScriptの場合
@Component
export default class MyComponent3 extends Vue {
  @Prop({type: Number})
  private id!: number;

  @Prop({type: String})
  private msg!: string;
}

マルチビュー

{
  path: '/multi',
  name: 'multi',
  components: {
    default: () => import(/* webpackChunkName: "my-component2" */ '../components/MyComponent2.vue'),
    sub: () => import(/* webpackChunkName: "my-component3" */ '../components/MyComponent3.vue'),
  }
},
<router-view>
<router-view name="sub">

入れ子のビュー

{
  path: '/nest',
  name: 'nest',
  component: () => import(/* webpackChunkName: "my-component4" */ '../components/MyComponent4.vue'),
  children: [
    {
      path: 'child', // /nest/childで表示される
      name: 'my-component2',
      component: () => import(/* webpackChunkName: "my-component2" */ '../components/MyComponent2.vue')
    }
  ]
},

ナビゲーションガード

グローバルガード

src/router/index.jsのVueRouterインスタンスに対してメソッドを定義。

  1. beforeEach
    ルートの遷移前(コンポーネントガード解決前)
  2. beforeResolve
    ルートの遷移前(コンポーネントガード解決後)
  3. afterEach
    ルートの遷移後

コンポーネントガード

  1. beforeRouteEnter
    コンポーネントへの遷移前
  2. beforeRouteUpdate
    コンポーネント上でルートが変化したとき
  3. beforeRouteLeave
    コンポーネントからの遷移前
// TypeScriptの場合
Component.registerHooks([
  'beforeRouteEnter'
])
// Vue.js3でTypeScriptの場合
Vue.registerHooks([
  'beforeRouteEnter'
])

ルートガード

src/router/index.jsのルート定義に対してメソッドを定義。

  1. beforeEnter
    ルートの遷移前
モバイルバージョンを終了