Как я могу получить требуемый ввод с помощью vuejs

У меня есть чат, и я не хочу, чтобы люди отправляли пустые сообщения, поэтому я хотел бы, чтобы мой вклад стал обязательным. Спасибо за вашу помощь.

Я пытался поставить "required='required'" в строку ввода, я также пробовал veeValidate, но это сломало мой чат, когда я его использовал, я также пытался поставить "Required = true" в свойствах и данных, но без хорошего результата

Это ChatForm.vue

<template>
    <div class = "input-group" >
        <input id = "btn-input" type = "text" name = "message"  class = "form-control input-sm" placeholder = "Ecrire..." v-model = "newMessage" @keyup.enter = "sendMessage">

        <span class = "input-group-btn">
            <button class = "btn btn-primary btn-sm"  id = "btn-chat" @click = "sendMessage">
                &#10003
            </button>
        </span>
    </div>
</template>

<script>


    export default {
        props: ['user'],

        data() {
            return {
                newMessage: '',
            }
        },

        methods: {
            sendMessage() {
                this.$emit('messagesent', {
                    user: this.user,
                    message: this.newMessage
                });

                setTimeout(function() {
                    const messages = document.getElementById('mess_cont');

                    messages.scrollTop = messages.scrollHeight;
                    }, 200);
                this.newMessage = '';

            }

        }
    }


</script>

А это моя форма в app.blade.php

  <div id = "app" class = "container-chat">

                    <div class = "row">
                        <div class = "col-md-12 col-md-offset-2">
                            <div class = "col-md-12 col-md-offset-2">
                                <div class = "panel-body panel-content" id = "mess_cont">

                                    <chat-messages id = "mess" :messages = "messages" :currentuserid = "{{Auth::user()->id}}"></chat-messages>
                                </div>
                                <div class = "panel-footer">
                                    <chat-form
                                            v-on:messagesent = "addMessage"
                                            :user = "{{ Auth::user() }}"
                                    ></chat-form>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

Вы пытались обернуть свой ввод внутри формы?

asimhashmi 07.05.2019 09:49

да и тоже не работает

Bastos 07.05.2019 09:53

Не могли бы вы опубликовать ошибку, с которой вы столкнулись для Vuelidate? ниже приведен пример, если это работает для вас: import Vuelidate from 'vuelidate'; import { required } from 'vuelidate/lib/validators'; export default { validations: { Message: { required } } }

S R 07.05.2019 10:00

Я имею в виду, что у меня нет ошибки, но мой чат исчезает, когда я им пользуюсь

Bastos 07.05.2019 10:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
4
14 039
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Есть несколько вещей, которые я бы сделал по-другому.

1/ Оберните форму чата тегом и выполните метод sendMessage() при отправке. Это даст вашим пользователям более приятный опыт, так как они могут просто отправить сообщение.

2/Преобразуйте кнопку в кнопку отправки, чтобы она вызывала событие form.submit.

3/Вы можете легко отключить кнопку, проверив, есть ли у newMessage содержимое. Я не думаю, что вам нужна проверка или что-то еще, чтобы добиться этого; для чего-то столь же простого, как форма чата, вашему пользователю не нужно гораздо больше отзывов, чем видеть отключенную кнопку, чтобы понять, что ему нужно что-то написать в первую очередь.

4/ в методе addMessage вы можете просто проверить содержимое newMessage и ничего не делать, когда оно пустое. Это совершенно нормально, потому что вы уже намекнули пользователю, отключив кнопку.

Я думаю, что это тонкий способ, которым вы направляете своего пользователя, но не переусердствуйте. Надеюсь это поможет.

Спасибо за вашу помощь, я постараюсь дать вам обратную связь, как только смогу!

Bastos 07.05.2019 10:14
Ответ принят как подходящий

Попробуйте изменить свой ChatForm.vue следующим образом:

<template>
 <form @submit.prevent = "sendMessage">   
   <div class = "input-group" >
     <input id = "btn-input" type = "text" name = "message"  class = "form-control input-sm" placeholder = "Ecrire..." v-model = "newMessage" required>

     <span class = "input-group-btn">
       <button class = "btn btn-primary btn-sm" type = "submit" id = "btn-chat">
                &#10003
            </button>
        </span>
    </div>
</template>

Вы неправильно обрабатываете input, требуемый input должен находиться внутри form, а ключевое слово required предотвратит отправку формы, если поле input пусто.

Добавьте атрибуты имени ко всем элементам формы. У некоторых элементов в моей форме был атрибут имени, а у некоторых - нет. Элемент, у которого были атрибуты имени, работал правильно, но тот, у которого не было имени, не работал.

Другие вопросы по теме