はじめに
- 前回、docker環境でVue3とTypeScriptを動作する環境を作ったので開発するためにhot reloadできるようにする
px-wing.hatenablog.com
vue.config.jsファイル
- watchOptionsでpollをtrueに設定すると修正した内容がすぐに反映される。
module.exports = {
devServer: {
port: 8080,
disableHostCheck: true,
watchOptions: {
poll: true
}
},
};
vue routerインストール
vue add router
- ルーターに履歴モードを使用しますか?と聞かれるのでとにかくYesを選択する
Use history mode for router? (Requires proper server setup for index fallback in production) Yes
コード
- インストールすると下記のようなルーティングファイルが作成される
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
//component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
component: () => import('@/views/About.vue')
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
- ルーティングを設定してみる。
- 下記の記述をするとルートレベルのコード分割ができ、これにより、このルート用に個別のチャンク(about。[hash] .js)が生成される。
ルートにアクセスすると遅延読み込みされます。
{
path: '/form',
name: 'Form',
component: () => import('@/views/Form.vue')
}
- View側の実装はリンク生成は下記のようにする。router-viewタグがないとルーティングが正しく動作しない。
<template>
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
<router-link to="/form">Form</router-link>
</div>
<router-view/>
</template>
<template>
<div class="form">
<form>
<input type="text" name="meme" />
<input type="submit" value="送信" />
</form>
</div>
</template>
その他
- 下記の記述はwebpackのresolve.aliasを使った記述でパスを気にしないくて良い記述ができるらしい。
import Counter from '@/components/Hoge.vue'
qiita.com