【Laravel5.8 + Vue】LaravelにVueのComponentを作成したい
前回の記事では、Laravel5.8でVue.jsを使用する際の基本的な操作をご紹介しましたがComponentを追加したい場合の手順も記載しておきます。
/resources/js/components/MyComponent.vueの作成
まずは追加したいComponentを該当のディレクトリに追加しましょう。
<template> <div> <p>{{msg}}</p> <input type='text' v-model='name'> <button @click='doAction' /> </div> </template> <script> export default{ data: function () { return{ msg: '', name: '' } }, methods: { doAction: function () { this.msg = this.name + 'さん、こんにちは〜' } } } </script>
細かい説明は省きますが、inputタグの中のデータをdataのnameとv-modelでつなぎ、@click(もしくはv-on:click)でmethodsを呼び出せるようにします。
@clickイベントでdataが反映されると、{{msg}}に対して入力されたデータと、「さん、こんにちは〜」という文字列がデータバインディングで出力されるようになっています。
/resources/js/app.jsに追記
Vue.component('my-component', require('./components/MyComponent.vue').default);
componentのパスと名前に応じて上記を変える必要がありますが、手順通りにComponentを該当ディレクトリに入力した場合は上記の記載でOKです。
第一引数の「'my-component'」が後ほどコンテナタグ内に書き込むタグ名となるため、注意です!
Componentを追加する度に、app.jsへの追記が必要となるため覚えておきましょう。
ルートタグに追記
前回の記事では、welcome.blade.phpへコンテナタグを設けていましたので、今回もこちらの方にMyComponent.vueで作成したtemplateを表示させましょう。
<!DOCTYPE html> <html lang="ja"> <head> <title>Index</title> <!--/resoces/css/ と /public/css/ のCSSファイルを読み込む--> <link href="{{ mix('css/app.css') }}" rel="stylesheet" type="text/css"> <!--LaravelでVueを使用する際のお約束!--> <meta name="csrf-token" content="{{ csrf_token() }}"> </head> <body> <h1>Hello/Index</h1> <p>{{$msg}}</p> <!--VueのComponentを読み込むためにはappというidのdiv要素を配置する--> <div id="app"> <!--「appというidのdiv要素」の中にcomponentの設置--> <example-component></example-component> <my-component></my-component> ★ </div> <!--/resoces/js/ と /public/js/ のJSファイルを読み込む--> <!--コンテナタグ(= <div id="app"> )の後に記述する--> <script src="{{ mix('js/app.js') }}"></script> </body> </html>
こちらでComponentが実際に表示されているか、そしてinputタグから入力してボタンを押すとメッセージが出力されるかを確認してみましょう。