LoginSignup
8
7

More than 3 years have passed since last update.

LaravelのBladeにVueコンポーネントを組み込む方法をまとめます。

環境

  • laradock
  • php: 7.3
  • Laravel: 7.2

Vue.jsをインストールする

laravel/package.json
"vue": "^2.6.11", 
"vue-template-compiler": "^2.6.11"
$ docker-compose exec workspace npm install

Vueコンポーネントを作成する

試しにハートボタンを作成します。

laravel/resources/js/components/SampleLike.vue
<template>
  <div>
    <button
      type="button"
      class="btn m-0 p-1 shadow-none"
    >
      <i class="fas fa-heart mr-1"
      />
    </button>
    10
  </div>
</template>

<script>
</script>

app.jsを編集

laravel/resources/js/app.js
import Vue from 'vue'
import Samplelike from './components/SampleLike'

const app = new Vue({
  el: '#app',
  components: {
    SampleLike,
  }
})

laravelの全画面で使用できるようにここで読み込みます。

Laravel Mixを編集

laravel/webpack.mix.js
mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .version();

上記はresources/js/app.jsをトランスパイルしてpublic/jsのapp.jsというファイルで保存されるよというソースです。
.version()はトランスパイルされる時に毎回idを採番する役割ですが、これは同じidの古いjavascriptをブラウザキャッシュに残さないためです。

.gitignoreを編集

下記はjavascriptが編集される都度トランスパイルされてファイルが作成・更新されていくため、
管理対象から外しておきます。

laravel/.gitignore
/node_modules
/public/css # 追加
/public/hot
/public/js  # 追加
/public/mix-manifest.json # 追加

トランスパイルの実行

$ docker-compose exec workspace npm run watch-poll

DONE Compiled successfullyと表示されればトランスパイル成功です。
上記のコマンドはjavascriptが編集されたら自動でトランスパイルしてくれます。

app.blade.phpを編集

laravel/resources/views/app.blade.php
{{--省略--}}
<body>
  <div id="app"> {{--追加--}}
    @yield('content')
  </div> {{--追加--}}

  <script src="{{ mix('js/app.js') }}"></script> {{--追加--}}
{{--省略--}}
</body>

BladeにVueコンポーネントを組み込む

laravel/resources/views/posts/index.blade.php
<div class="card-body pt-0 pb-2 pl-3">
    <div class="card-text">
      <sample-like>
      </sample-like>
    </div>
  </div>

組み込むときはケバブケースで記述する。

これでハートボタンとダミーの10が表示でき、Vueコンポーネントを組み込めたかと思います。

8
7
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
8
7