javascript - Vue + Vuetify 清除表单时的验证问题

标签 javascript validation vuejs2 vuetify.js

我正在尝试为我的应用程序构建一些简单的 CRUD 功能,并且我想重复使用相同的表单来创建和更新。

我正在更新的模型是菜单。

我这样做的方法(如果有更好的方法,请告诉我)是在新按钮上使用方法 openForm(menu = null) 我只是不传递菜单和在我做的编辑按钮上。

openForm 然后检查菜单是否为 null 以及它是否创建一个空菜单对象。

然后将其作为 menuForForm 存储在 data() 中。

我的表单接收这个作为 Prop ,用于呈现我的表单。

我的问题是,当我使用 Vuetify $refs.form.reset() 方法清除表单时,我得到了一大堆与空值相关的错误。这似乎是由于验证规则,就好像我删除它们一样。

我不明白为什么字段值为 null 会导致这些问题,就好像我将表单绑定(bind)到正常的 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)

有没有人知道为什么会这样,我已经研究了好几个小时了,这让我发疯。

最佳答案

你的规则应该是

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

关于javascript - Vue + Vuetify 清除表单时的验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50366713/

相关文章:

javascript - 需要验证 MM/dd/yyyy hh :mm tt in Javascript

flexbox - vuetify 中心项目到 v-flex

javascript - Prop watch 触发无变化

javascript - 获取每个offsetParent或总offSetTop和总offSetLeft

javascript - django数据输入中的日期选择器

javascript - 优化我的 Javascript/jQuery XML 函数

验证全名的 Java 正则表达式只允许空格和字母

javascript - Angularjs - 动态 ng-options

java - 使用 XSLT 转换时 XML 数字签名验证失败

javascript - 如何在组件 VueJS 中初始化小部件?