何に困っているか
既存のRailsアプリにVue.jsを導入し、単一ファイルコンポーネントで一部のパーツをVue.jsのテンプレートで作成したいと思っています。
何とか動くようにはなったのですが、設定ファイルが非効率な書き方になっているので直したいと思っています。社内にVue.jsの知見のある人がおらず、調べても見つかりませんでしたので、何卒宜しくお願い致します。
前提条件・実行環境
- Rails 5.2.4.2
- Vue.js 3.0.1
rails new
時に webpacker
は導入していますが、Vue.js
は導入していません。
rails new app_name --skip-coffee --skip-turbolinks --webpack
Vue.js は後から./bin/rails webpacker:install:vue
で導入しています。
作成したファイル
レイアウトファイルに以下のコードを記述しています。
Ruby
1# vews/layout/application.thml.haml 2= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
コンポーネントはこのような形でviewに埋め込んでいます。(今回はトップに戻るボタンのコンポーネントなので、scroll_top_btn.vue
というファイルを作成しています。)
Ruby
1# viewファイル 2%scroll-top-btn
.vue
のテンプレートファイルは、一度hello_vue.js
にまとめて、application.js
に読み込んでいます。
js
1// javascript/packs/hello_vue.js 2 3import Vue from 'vue/dist/vue.esm' 4import ScrollTopBtn from '../components/scroll_top_btn.vue' 5 6document.addEventListener('DOMContentLoaded', () => { 7 new Vue({ 8 el: 'scroll-top-btn', 9 components: { ScrollTopBtn } 10 }) 11})
js
1// javascript/packs/application.js 2import './hello_vue.js'
問題点
悩んでいるのは、このhello_vue.js
の記載方法で、
js
1// javascript/packs/hello_vue.js 2document.addEventListener('DOMContentLoaded', () => { 3 new Vue({ 4 el: 'scroll-top-btn', 5 components: { ScrollTopBtn } 6 }) 7})
この書き方だと、コンポーネントが増えるたびに都度new Vue()
をhello_vue.js
内に記載しないといけなくなってしまいます。何とか、もっとスマートに描く方法はありませんでしょうか?
ちなみに、単一ファイルコンポーネント内はこのようになっております。
vue
1// javascript/componemts/scroll_top_btn.vue 2<template> 3 <div class="scroll-top-btn"> 4 <img 5 src="/img/btn_img.svg" 6 @click="scrollTop" /> 7 </div> 8</template> 9 10<script defer> 11 export default { 12 methods: { 13 scrollTop: function() { 14 // 処理 15 } 16 } 17 } 18</script>
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。