-1

как сделать замену формы на сообщение при successtrue = true

<template>
    <div class="message-success" v-if="successtrue">
        <svg class="success"><use xlink:href="#success"></use></svg>
        <p>Ваша идея отправлена на модерацию! Спасибо, что помогаете сделать наш проект лучше!</p>
    </div>
    <div class="add-offer-form" v-else>
        <form action="" method="post" v-on:submit="offerForm()" class="offer_form">
            <div class="flex-item">
                <label for="">Тема предложения <span v-text="(maxtitle - title.length)"></span></label>
                <input type="text" :maxlength="maxtitle" v-model="title" id="title" name="title" value="">
            </div>
            <div class="comm-item">
                <span v-text="(max - messageo.length)"></span>
                <textarea name="messageo" :maxlength="max" v-model="messageo" id="messageo" cols="30" rows="10"></textarea>
            </div>
            <button type="submit" class="btn-blue s-center">Добавить идею</button>
        </form>

    </div>
</template>

<script>
    import axios from 'axios'
    Vue.use(axios)

    export default {
        el: '#add_offer',
        data: function(){
            return {
                successtrue: false,
                max: 1000,
                maxtitle: 255,
                title: '',
                messageo: ''
            }
        },
        computed:{
            formData(){
                return {
                    title:this.title,
                    messageo:this.messageo
                }
            }
        },
        methods: {
            offerForm() {
                event.preventDefault();
                axios.post('/offers/create', this.formData)
                    .then(function (resp) {
                        this.successtrue = true;
                    })
                    .catch(function (resp) {
                        console.log(resp);
                        alert("Could not create your company");
                        this.successtrue = false;
                    });
            }
        }
    }

</script>
  • axios - это не плагин для vue - не нужно его регистрировать. –  Jun 14 '19 at 03:18
  • подскажите почему не заменяет при успешной отправке? – extrememod Jun 14 '19 at 03:27
  • Вам надо сюда перейти и прям досконально разобраться, чтоб вопросов не осталось. –  Jun 14 '19 at 03:29
  • почему-то пишет TypeError: Cannot set property 'successtrue' of undefined не могу понять почему – extrememod Jun 14 '19 at 03:44
  • а все ок, сделал так v-on:submit="offerForm(successtrue)" offerForm(successtrue) (this.successtrue = true;) – extrememod Jun 14 '19 at 04:01

1 Answers1

0
<template>
    <div class="message-success" v-if="successtrue">
        <svg class="success"><use xlink:href="#success"></use></svg>
        <p>Ваша идея отправлена на модерацию! Спасибо, что помогаете сделать наш проект лучше!</p>
    </div>
    <div class="add-offer-form" v-else>
        <form action="" method="post" v-on:submit="offerForm(successtrue)" class="offer_form">
            <div class="flex-item">
                <label for="">Тема предложения <span v-text="(maxtitle - form.title.length)"></span></label>
                <input type="text" :maxlength="maxtitle" v-model="form.title" id="title" name="title" value="">
            </div>
            <div class="comm-item">
                <span v-text="(max - form.messageo.length)"></span>
                <textarea name="messageo" :maxlength="max" v-model="form.messageo" id="messageo" cols="30" rows="10"></textarea>
            </div>
            <button type="submit" class="btn-blue s-center">Добавить идею</button>
        </form>

    </div>
</template>

<script>
    import axios from 'axios'
    export default {
        el: '#add_offer',
        data: function(){
            return {
                successtrue: false,
                max: 1000,
                maxtitle: 255,
                form: {
                    title: '',
                    messageo: ''
                }
            }
        },
        methods: {
            offerForm() {
                event.preventDefault();
                axios.post('/offers/create', this.form)
                    .then((response) => {
                        this.successtrue = true;
                        console.log('strict:', this);
                    })
                    .catch(function (resp) {
                        console.log(resp);
                        alert("Could not create your company");
                        this.successtrue = false;
                    });
            }
        }
    }

</script>
  • где именно? на onSubmit? – extrememod Jun 14 '19 at 04:08
  • а блин, затупил, исправил, спасибо – extrememod Jun 14 '19 at 04:13
  • а, точно, спасибо еще раз, откатил просто изменения и появился – extrememod Jun 14 '19 at 04:16
  • спасибо, исправил – extrememod Jun 14 '19 at 04:30
  • учтите, если ответ упадет в catch ошибка снова появится исправьте .catch( resp => { this.successtrue = false } ) – bobanobi4 Jun 14 '19 at 04:56
  • у меня ведь прописано, или неверно? – extrememod Jun 14 '19 at 05:02
  • в блоке .then - верно, в .catch вы используете function и внутри него вы не увидите succestrue, т.к. this в данном случае указывает на область видимости function, а не корневого vue, у стрелочных функций нет своего this, поэтому обращение идет к корневому элементу – bobanobi4 Jun 14 '19 at 05:25