【vue+webpack】単一コンポーネント(.vue)での簡易的なルーティング
状況
クライアントサイドのフレームワークは入門レベル。
現在vue+webpackでチュートリアル以降、自分用アプリを作って練習中。
やったこと
SPAはちょっとまだいいかなと思ってvue-routerは入れなかったんだけど、若干ルーティング的なことがしたくなった。
.vueファイルを使う単一コンポーネントの場合にそのまま使える例がみつからなかったので、自力でできるだけ簡単に実装した。
環境
vue-cliで作成。
vue -V
2.9.6
vue init webpack xxx
内容
フォルダ構成
生成されるファイル群のうちsrcフォルダ内のみ表示。
D:.
│ App.vue
│ main.js
│ simpleRouter.js ←ルーティング情報を持つ
│
├─assets
│ logo.png
│
└─components
cmpA.vue ←ルーティング先
cmpB.vue ←ルーティング先
cmpC.vue ←ルーティング先
cmpP.vue ←親
動き
押すとふつうに切り替わる感じ。親コンポーネントと呼んではいるものの、移動はページ単位。
ソース
ルーター
といっても実際に飛ばす動きはしないので単にルーティングテーブルみたいな感じか。
リンク先のパス名とコンポーネントを持たせる。
simpleRouter.js
import A from './components/cmpA'
import B from './components/cmpB'
import C from './components/cmpC'
export default {
'/A': A,
'/B': B,
'/C': C
}
リンク先になるコンポーネントファイルたち
cmpA.vue
<template>
<div>コンポーネントA</div>
</template>
<script>
export default {
}
</script>
<style scoped>
div {
color:green;
}
</style>
cmpB.vue
<template>
<div>コンポーネントB</div>
</template>
<script>
export default {
}
</script>
<style scoped>
div {
color:blue;
}
</style>
cmpC.vue
<template>
<div>コンポーネントC</div>
</template>
<script>
export default {
}
</script>
<style scoped>
div {
color:red;
}
</style>
呼び出し元になるコンポーネントファイル
ここで実際にルーティング。
単純にパス名取ってルーティングテーブルからコンポーネントを引っ張る。
cmpP.vue
<template>
<div id="Parent">
<a href="/">親コンポーネント</a><br/>
<a href="/A">cmpAを表示</a>
<a href="/B">cmpBを表示</a>
<a href="/C">cmpCを表示</a>
<component :is="cmp"/>
</div>
</template>
<script>
import simpleRouter from '../simpleRouter.js'
export default {
data() {
return {
cmp: simpleRouter[window.location.pathname],
}
}
}
window.addEventListener('popstate', () => {
app.currentRoute = window.location.pathname
})
</script>
おわり
自分用なのでこのくらいで十分ですね。部分的な更新とかぬるぬる遷移するようなやつはまた別にやりましょう。
Not Foundくらいは対応しないといけないと思う。
Author And Source
この問題について(【vue+webpack】単一コンポーネント(.vue)での簡易的なルーティング), 我々は、より多くの情報をここで見つけました https://qiita.com/GrykT/items/f208336af7dedb11ea2f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .