当前位置: 首页 > 知识库问答 >
问题:

重置后出现Vuetify表单验证错误

江英华
2023-03-14

我在一个组件中有以下内容:

<v-form v-model="valid" ref="form" class="px-3">
  <v-text-field label="First Name" v-model="firstname" :rules="inputRules"></v-text-field>
  <v-text-field label="Last Name" v-model="lastname" :rules="inputRules"></v-text-field>
  <v-text-field label="Email" v-model="email"></v-text-field>
  <v-btn :loading="loading" flat class="success mx-0 mt-3" @click="submit">Create Person</v-btn>
</v-form>

脚本:

export default {
  data() {
    return {
      valid: true,
      firstname: '',
      lastname: '',
      email: '',
      loading: false,
      dialog: false,
      inputRules: [
        v => v.length >= 2 || 'Minimum length is 2 characters'
      ]
    }
  },
  methods: {
    submit() {
      if(this.$refs.form.validate()) {
        this.loading = true;

        const person = {
          firstname: this.firstname,
          lastname: this.lastname,
          email: this.email
        };

        sendToMyDB(person).then(()=>{
          this.loading = false;
          this.dialog = false;
          this.$refs.form.reset();
        })
      }
    }
  }
}

因此,我将表单数据提交到我的数据库,然后在成功promise中,我使用它。$refs.form.reset();重新设置我的表单。

但是,我会立即收到错误消息,并且在每次提交后都会收到错误消息:

"[Vue警告]:错误在下一个滴答:"TypeError:无法读取属性'长度'的未定义"

TypeError:无法读取未定义的属性“length”

共有1个答案

邹时铭
2023-03-14

Vuetify正在将未定义的传递给在inpuput规则中引用的函数。您可以看到它正在读取堆栈调用:

我建议您在访问其内容之前测试v是否未定义

v => (v && v.length >= 2) || 'Minimum length is 2 characters' 

或者

v => (!v || v.length >= 2) || 'Minimum length is 2 characters'

取决于您的业务规则。

var app = new Vue({
  el: '#app',
  data() {
    return {
      valid: true,
      firstname: '',
      lastname: '',
      email: '',
      loading: false,
      dialog: false,
      inputRules: [
        v => (v && v.length >= 2) || 'Minimum length is 2 characters'
      ]
    }
  },
  methods: {
    submit() {
      if (this.$refs.form.validate()) {
        this.loading = true;

        const person = {
          firstname: this.firstname,
          lastname: this.lastname,
          email: this.email
        };

        /* sendToMyDB(person) */
        Promise.resolve().then(() => {
          this.loading = false;
          this.dialog = false;
          this.$refs.form.reset();
        })
      }
    }
  }
});
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<script src="https://unpkg.com/vuetify/dist/vuetify.min.js"></script>

<div id="app">
  <v-form v-model="valid" ref="form" class="px-3">
    <v-text-field label="First Name" v-model="firstname" :rules="inputRules"></v-text-field>
    <v-text-field label="Last Name" v-model="lastname" :rules="inputRules"></v-text-field>
    <v-text-field label="Email" v-model="email"></v-text-field>
    <v-btn :loading="loading" text class="success mx-0 mt-3" @click="submit">Create Person</v-btn>
  </v-form>
</div>

 类似资料:
  • 本文向大家介绍Django实现表单验证,包括了Django实现表单验证的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Django实现表单验证的具体代码,供大家参考,具体内容如下 models.py form.py view.py register.html 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍AngularJS实现表单验证,包括了AngularJS实现表单验证的使用技巧和注意事项,需要的朋友参考一下 虽然我不是前端程序员,但明白前端做好验证是多么重要。 因为这样后端就可以多喘口气了,而且相比后端什么的果然还是前端可以提高用户的幸福感。 AngularJS提供了很方便的表单验证功能,在此记录一番。 首先从下面这段代码开始 input标签的一些验证选项,通常和HTML5标记搭

  • 本文向大家介绍AngularJS实现表单手动验证和表单自动验证,包括了AngularJS实现表单手动验证和表单自动验证的使用技巧和注意事项,需要的朋友参考一下 AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证。 一、手动验证 所谓手动验证是通过AngularJS表单的属性来验证。而成为AngularJS表单必须满足两个条件: 1、给form元素加上novalidate="no

  • 所以有人可以请解释一下我如何在GoDaddy上安装Cpanel中的软件包?

  • CodeIgniter 提供了一个全面的表单验证和数据预处理类以帮助缩减你所写的代码。 概述 表单验证指南 表单 成功页面 控制器 设置验证规则 使用一个数组设置验证规则 级联规则(Cascading Rules) 预处理数据(Prepping Data) 重新填充表单(Re-populating the Form) 回调 设置错误信息 更改错误定界符 翻译表单域名字 独立显示错误 将一系列验证规

  • 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 authorize 绝不 使用 authorize() 方法来做用户授权,用户授权我们会单独使用 Policy 授权策略 来实现。 使用基类 所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php 基类。基类文件如下: <?php n