Laravel & VueJS: вызов метода VueJS внутри лезвия - PullRequest
2 голосов
/ 11 февраля 2020

Я новичок в Laravel & VueJS, так что заранее извините за испорченный код.

Я пытался создать регистрационную форму с интеграцией VueJS в laravel чтобы сделать его более динамичным c. Теперь я пытаюсь использовать @ инфронт {{ }}, чтобы показать laravel, я пытаюсь интегрировать VueJS, но вместо VueJS отвечая на это, он просто печатает: {{ error }} или {{ checked ? "yes" : "no" }}.

Клинок

@extends('layout.layout')

@section('content')
    <section class="page-content">
        <div class="container">
            <article class="fillout-form">
                <form action="{{ route('account.register.new') }}" method="post" id="registerForm">
                    {{ csrf_field() }}
                    @{{ error }}
                    <section v-if="step === 1">

                        <h1>Step One</h1>
                        <p>
                            <legend for="name">Your Name:</legend>
                            <input id="name" name="name" v-model="registration.name">
                        </p>

                        <p>
                            <legend for="surname">Your Lastname:</legend>
                            <input id="surname" name="surname" v-model="registration.surname">
                        </p>

                        <p>
                            <legend for="email">Your Email:</legend>
                            <input id="email" name="email" type="email" v-model="registration.email">
                        </p>

                        <p>
                            <legend for="number">Your Phone number:</legend>
                            <input id="number" name="number" type="number" v-model="registration.number">
                        </p>


                        <button @click.prevent="next()">Next</button>

                    </section>

                    <section v-if="step === 2">

                        <h2>Step Two</h2>
                        <p>
                            <legend for="account">Account Holder:</legend>
                            <input id="account" name="account" v-model="registration.account">
                        </p>

                        <p>
                            <legend for="iban">Your IBAN:</legend>
                            <input id="iban" name="iban" v-model="registration.iban">
                        </p>

                        <button @click.prevent="prev()">Previous</button>
                        <button @click.prevent="next()">Next</button>

                    </section>

                    <section v-if="step === 3">

                        <h3>Step Three</h3>

                        <p>
                            <input type="checkbox" v-model="checked">
                            @{{ checked ? "yes" : "no" }}
                        </p>

                        <button @click.prevent="prev()">Previous</button>
                        <button @click.prevent="submit()">Save</button>

                    </section>
                </form>
            </article>
        </div>
    </section>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="{{asset ('js/registerFlow.js')}}"></script>

@endsection

VueJS

const errors = {
    empty: 'Please fill in all fields',
    invalidmail: 'Your email is invalid',
};

const app = new Vue({
    el:'#app',
    mounted() {
        window.addEventListener("keypress", function (event) {
            if (event.keyCode === 13) {
                event.preventDefault();
                this.next();
            }
        })
    },
    data() {
        return {
            error: null,
            step:1,
            checked: false,
            registration:{
                name:null,
                surname:null,
                email:null,
                number:null,
                account:null,
                iban:null,
            },
        }
    },
    methods: {

        prev() {
            this.step--;
        },

        next() {

            this.error = "";

            if(this.step === 1)
            {
                if(!this.registration.name || !this.registration.surname || !this.registration.email || !this.registration.number)
                {
                    this.error = errors.empty;
                    return false;
                }
            }

            if(this.step === 2)
            {
                if(!this.registration.account || !this.registration.iban)
                {
                    this.error = errors.empty;
                    return false;
                }
            }
            this.step++;
        },

        submit() {

            alert('Submit to blah and show blah and etc.');
        },


    }
});

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Проблема в том, что вы смешиваете два шаблонизатора. Вы можете создать компонент Vue, который не будет затронут лезвием и передаст данные об ошибках для визуализации.

0 голосов
/ 11 февраля 2020

Это неправильный способ использования Vue. js и Laravel. Обычно вместо того, чтобы писать все в своем блейде, вы просто создаете компонент в своем файле .blade и перемещаете все логи c в своем файле .vue. Я бы посоветовал вам прочитать this , чтобы понять, как настроить простую форму в Laravel / Vue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...