0
0

More than 3 years have passed since last update.

RailsにVuetifyを導入したプロセス

Last updated at Posted at 2020-12-23

 背景

vue, vuetifyをインストールするぐらいならすぐ終わるだろうと思ってましたが、意外と手こずったので、次に同じエラーを起こさないように、備忘録として残しておきます。

前提

vue(webpack)がインストールされている。
書きました→Rails内にVueを導入

方法(というかプロセス)

最初はこのqiitaを参考にしました。
https://qiita.com/onoblog/items/e1a94fde9ed50f451d13
その後、Vuetifyを読み込んだら、コンソールでエラー確認。Vuetifyのパーツが読み込まれていなかった。

v-toolbarが読み込まれてない。

Vue warn]: Error in render: "TypeError: Cannot read property 'smAndDown' of undefined"

これが同じの6こくらい。


vue.esm.js:1937 TypeError: Cannot read property 'smAndDown' of undefined


ググったら、この記事を発見。(これでvuetifyが表示されるようになった)
https://stackoverflow.com/questions/58070686/cannot-read-property-t-of-undefined-using-vuetify-and-laravel/58070989

new Vue({
  el: '#app',
  vuetify: new Vuetify()
})

終わりです。

一応コード

hello_vue.js
// import Vue from 'vue/dist/vue.esm';
//environment.jsに移動させた。
import Vue from 'vue';
import Vuetify from "vuetify"; 
import "vuetify/dist/vuetify.min.css"; 
import App from '../app.vue'


Vue.use(Vuetify); 
// const vuetify = new Vuetify(); 

document.addEventListener('DOMContentLoaded', () => {
  const app = new Vue({
    // vuetify,
    vuetify: new Vuetify(),
    el: '#hello',
    render: h => h(App)
  }).$mount()
  document.body.appendChild(app.$el)

  console.log(app)
})


//Disable “development mode” warning in VueJS
Vue.config.productionTip = false
environment.js
.
.
.
environment.config.merge({
    resolve: {
      alias: {
        'vue$': 'vue/dist/vue.esm.js'
      }
    }
  })
header.vue
<template>
  <v-card>
    <v-toolbar
      color="cyan"
      dark
      flat
    >
      <v-app-bar-nav-icon></v-app-bar-nav-icon>

      <v-toolbar-title>Page title</v-toolbar-title>

      <v-spacer></v-spacer>

      <v-btn icon>
        <v-icon>mdi-magnify</v-icon>
      </v-btn>

      <v-btn icon>
        <v-icon>mdi-dots-vertical</v-icon>
      </v-btn>

      <template v-slot:extension>
        <v-tabs
          v-model="model"
          centered
          slider-color="yellow"
        >
          <v-tab
            v-for="i in 3"
            :key="i"
            :href="`#tab-${i}`"
          >
            Item {{ i }}
          </v-tab>
        </v-tabs>
      </template>
    </v-toolbar>

    <v-tabs-items v-model="model">
      <v-tab-item
        v-for="i in 3"
        :key="i"
        :value="`tab-${i}`"
      >
        <v-card flat>
          <v-card-text v-text="text"></v-card-text>
        </v-card>
      </v-tab-item>
    </v-tabs-items>
  </v-card>
</template>
<script>
  export default {
    data () {
      return {
        model: 'tab-2',
        text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
      }
    },
  }
</script>
app.vue
<template>
    <div id ="app"> 
      <Header />
      <!-- <router-view/> -->
     </div>
</template>
<script>
import Header from './packs/components/Header.vue'
export default {
  components: {
     Header
  },
}
</script>
home.html.erb
<div id='hello'>
<app></app>
</div>
 <%= stylesheet_pack_tag 'hello_vue' %>
 <%= javascript_pack_tag 'hello_vue' %>

ブラウザにこのパーツが表示されればokです。
https://vuetifyjs.com/en/components/tabs/#tab-items

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0