Проблема с проверкой Vue + Vuetify при очистке формы

Я пытаюсь создать простую функциональность CRUD для своего приложения и хочу повторно использовать ту же форму как для создания, так и для обновления.

Моя модель, которую я обновляю, - это Меню.

Я делаю это (пожалуйста, дайте мне знать, если есть лучший способ), используя метод openForm(menu = null) на новой кнопке, я просто не передаю меню, а на кнопке редактирования я делаю.

Затем openForm проверяет, является ли меню нулевым, и создает ли он пустой объект меню.

Затем он сохраняется в data() как menuForForm.

Моя форма получает это как опору, которая используется для рендеринга моей формы.

Моя проблема в том, что когда я использую метод Vuetify $refs.form.reset() для очистки формы, я получаю массу ошибок, связанных с нулевыми значениями. Кажется, это связано с правилами проверки, как будто я их удаляю.

Я не могу понять, почему значение поля, равное нулю, вызывает эти проблемы, как будто я привязываю форму к обычным полям data(), она работает нормально.

Вот мой код:

Родительский компонент

<template>
    <v-flex xs12 sm6 lg4>
        <v_form
            v-if = "menuForForm"
            :menu = "menuForForm"
            >
        </v_form>
    </v-flex>
</template>

<script>
    data() {
        return {
            menuForForm: null,
            newMenu: {
                id: '',
                label: '',
                url: '',
            },
        }
    },
methods: {
    openMenuForm(menu = null) {
        menu ? this.menuForForm = JSON.parse(JSON.stringify(menu)) : 
        this.menuForForm = this.newMenu;
        this.$store.dispatch('setShowForm', true);
    },
}

</script>

Компонент формы

<template>
    <v-form ref = "form" v-model = "valid">
        <v-text-field
            v-model = "menu.label"
            :rules = "labelRules"
            label = "Label"
            required
        >
        </v-text-field>
        <v-btn
            color = "primary"
            :disabled = "!valid"
            @click = "submit"
        >
        submit
        </v-btn>
        <v-btn 
              @click = "clear"
        >
        clear
        </v-btn>
    </v-form>
</template>

<script>
    data(){
        return{
            valid: true,
            labelRules: [
                v => !!v || 'Name is required',
                v => v.length >= 3 || 'Label must be atleast than 3 characters'
            ], 
        }
    },
    methods:{
        clear() {
            this.$refs.form.reset();
        }
    }

</script>

Вот ошибка, которую я получаю, я нажимаю "Очистить":

[Vue warn]: Error in callback for watcher "value": "TypeError: Cannot read property 'length' of null"

found in

---> <VTextField>



[Vue warn]: Error in nextTick: "TypeError: Cannot read property 'length' of null"

found in

---> <VTextField>


TypeError: Cannot read property 'length' of null
    at labelRules (Form.vue?c13f:61)

Кто-нибудь знает, почему это происходит? Я занимаюсь этим уже несколько часов, и это сводит меня с ума.

Поведение ключевого слова "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) для оценки ваших знаний,...
6
0
7 355
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваши правила должны быть

data(){
    return{
        valid: true,
        labelRules: [
            v => !!v || 'Name is required',
            v => (v && v.length >= 3) || 'Label must be atleast than 3 characters'
        ], 
    }
}

Потому что при сбросе форма установит значение null

Демо: https://codepen.io/ittus/pen/KRGKdK

Большое спасибо!

Brad 16.05.2018 12:19

почему произошла следующая ошибка Error in beforeMount hook: TypeError: Cannot read property 'length' of null

Mohamed Raza 11.08.2020 17:38

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