knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

Laravel 5.6 + Vue.js の設定

index:

概要:

Laravel 5.6で、Vue.js を使用する場合の設定
についてメモです。

=> Vue.component を使用いていないので、
 推奨される方法では無いかもしれませんが
 正常動作を、確認できた部分のみ。記載したいと思います

環境とか

php7.1
Laravel 5.6
Vue.js

インスト

composer.phar create-project --prefer-dist laravel/laravel lara56 "5.6.*"
cd lara56
npm install
npm run dev

設定方法

=> 参考ページで、Vue.component
 を使用した例がありましたが。
bladeの、子テンプレートに Vue.jsを書くと
JSエラーが、出力されたり。回避できなかったので
対策方法みたいな。

・ resources\assets\js\app.js

require('./bootstrap');

=>bootstrap 以外を、削除
vue.js の定義等を、消す

・npm run dev の 再実行。
public\js\app.js が生成されるはず。
vue.js なし。

・ blade ,親template
=> vue.js読みます

<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>

resources/views/Layout/base2.blade.php

#
<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>{{ config('app.name', 'Laravel') }}</title>
    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
</head>
<body style="background: #FFF; ">
<!-- conte-mid -->
<div class="container" id="id_main_conte">
    <nav class="navbar navbar-default">
        <a class="navbar-brand" href="{{ url('/tasks') }}">
            タスク一覧
        </a>
        <a class="navbar-brand" href="{{ url('/tasks/create') }}">
            新規作成
        </a>
    </nav>
    <p>[ base2 ]</p>
    <div id="app">
        @yield('content')
    </div>
</div>

<!-- Scripts -->
<script src="{{ asset('js/app.js') }}?A1"></script>
</body>
</html>


・子, template
resources/views/tasks/test2.blade.php
=> Larabel の場合、blade にvue.js の変数( {{name}} みたいな)を書くと、
レンダー時、エラーとなりますが。 @を変数の前につけると。エラーでないようです。
@{{ name }} みたいな。

=>vue.js は、親テンプレで、読み込み
 vue インスタンス(new Vue )を、定義

=> v-for, v-on など、動作確認できました。

@extends('layouts.base2')

@section('title', 'タスク一覧')

@section('content')

    <div class="panel panel-default">
        <div class="panel-heading">
            一覧
        </div>
        <div class="panel-body">
        </div>
    </div>
    <hr />
    <div>
    <!-- vue -->
    <h1>vue test22:</h1>
    <div id="app_test2">
        こんにちは @{{ name }}.<br />
        <ul>
            <li v-for="(item, i) in list" :key="item">@{{ item }}
                <button @click="list.splice(i, 1)">remove</button>
            </li>
        </ul>        
        <!--
        <button @click="addItem">add</button>
        -->
        <button class="btn btn-primary" v-on:click="addItem">登録-2</button>
    </div>
    <!-- -->
    <script>
    var app = new Vue({
        el: '#app_test2',
        data: {
            name: 'World 355',
            message: 'msg, 123',
            counter: 0,
            list: ['Apple', 'Banana', 'Strawberry'],            
        },
        methods: {
            addItem: function() {
                this.list.push('Orange' + (++this.counter).toString())
            }
        },        
    });
    </script>    
@endsection

Github

=> resources 下のみですが。

https://github.com/kuc-arc-f/lara56_vue