el-form resetFields无效和validate无效的可能原因及解决方法

yizhihongxing

当使用el-form表单组件时,有时候会遇到resetFields无效或者validate无效的情况。这种问题很容易出现在比较复杂的表单中,通常有以下两种情况:

resetFields无效的可能原因及解决方法

  1. 表单组件未正确绑定ref属性

resetFields方法要求表单组件必须绑定ref属性,以便可以通过this.$refs.form.resetFields()来访问表单组件对象,从而实现表单重置的功能。如果未正确绑定ref属性,就会出现resetFields无效的情况。

示例代码:

<template>
  <div>
    <el-form :model="form" :rules="rules" ref="form">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="form.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" v-model="form.password"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submit">提交</el-button>
        <el-button type="text" @click="reset">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: "",
        password: "",
      },
      rules: {
        username: [{ required: true, message: "请填写用户名", trigger: "blur" }],
        password: [{ required: true, message: "请填写密码", trigger: "blur" }],
      },
    };
  },

  methods: {
    submit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // do something
        }
      });
    },

    reset() {
      // 未正确绑定ref属性
      this.$refs.form.resetFields();
    },
  },
};
</script>

解决方法:将el-form表单组件正确绑定ref属性即可。

<el-form :model="form" :rules="rules" ref="form">

2.涉及动态表单,表单元素的绑定未设置key

当渲染动态表单时,如果表单元素未设置key,则可能会造成resetFields无效的情况。这是因为表单元素缺少唯一的key值,Vue认为每个表单元素都没有发生变化,因此不会触发重置事件。

示例代码:

<template>
  <div>
    <el-form :model="form" :rules="rules" ref="form">
      <el-form-item v-for="(item, index) in formItems" :key="index">
        <el-input :placeholder="item.label" v-model="form[item.name]"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submit">提交</el-button>
        <el-button type="text" @click="reset">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {},
      formItems: [
        { name: "username", label: "用户名" },
        { name: "password", label: "密码" },
      ],
      rules: {
        username: [{ required: true, message: "请填写用户名", trigger: "blur" }],
        password: [{ required: true, message: "请填写密码", trigger: "blur" }],
      },
    };
  },

  methods: {
    submit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // do something
        }
      });
    },

    reset() {
      this.$refs.form.resetFields();
    },
  },
};
</script>

解决方法:为动态表单元素加上唯一的key值。

<el-form-item v-for="(item, index) in formItems" :key="index">
  <el-input :placeholder="item.label" v-model="form[item.name]"></el-input>
</el-form-item>

validate无效的可能原因及解决方法

  1. 验证规则未正确设置

当表单的验证规则未正确设置时,validate方法会失效。可能是规则未正确设置,规则不符合实际要求等原因造成的。

示例代码:

<template>
  <div>
    <el-form :model="form" :rules="rules" ref="form">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="form.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" v-model="form.password"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submit">提交</el-button>
        <el-button type="text" @click="validateForm">验证</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: "",
        password: "",
      },
      rules: {
        username: [{ required: true, message: "请填写用户名", trigger: "blur" }],
        // password的验证规则未设置
        // password: [{ required: true, message: "请填写密码", trigger: "blur" }],
      },
    };
  },

  methods: {
    submit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // do something
        }
      });
    },

    validateForm() {
      this.$refs.form.validate((valid) => {
        console.log(valid);
        if (!valid) {
          this.$message.error('验证失败')
        } else {
          this.$message.success('验证成功')
        }
      })
    }
  },
};
</script>

解决方法:正确设置表单元素的验证规则即可。

rules: {
  username: [{ required: true, message: "请填写用户名", trigger: "blur" }],
  password: [{ required: true, message: "请填写密码", trigger: "blur" }],
},

2.表单组件的prop属性未设置

el-form-item组件的prop属性用于绑定表单元素的验证规则,如果未设置,则会导致validate方法失效。

示例代码:

<template>
  <div>
    <el-form :model="form" ref="form">
      <el-form-item>
        <el-input v-model="form.username" placeholder="请输入用户名"></el-input>
      </el-form-item>
      <el-form-item>
        <el-input type="password" v-model="form.password" placeholder="请输入密码"></el-input>
      </el-form-item>
      <el-form-item prop="remember">
        <el-checkbox v-model="form.remember">记住密码</el-checkbox>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submit">提交</el-button>
        <el-button type="text" @click="validateForm">验证</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: "",
        password: "",
        remember: false,
      },
    };
  },

  methods: {
    submit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // do something
        }
      });
    },

    validateForm() {
      this.$refs.form.validate((valid) => {
        console.log(valid);
        if (!valid) {
          this.$message.error('验证失败')
        } else {
          this.$message.success('验证成功')
        }
      })
    }
  },
};
</script>

解决方法:为el-form-item组件设置正确的prop属性即可。

<el-form-item label="密码" prop="password">
  <el-input type="password" v-model="form.password"></el-input>
</el-form-item>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:el-form resetFields无效和validate无效的可能原因及解决方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue实现裁切图片同时实现放大、缩小、旋转功能

    实现裁切图片、放大、缩小、旋转等功能的方法涉及多个部分,包括使用vue、Canvas API以及一些库和插件。下面是一个基本的完整攻略: 步骤1:安装和配置所需的库和插件 我们需要安装vue-cropperjs和cropperjs这两个库,来实现裁切图片的功能。通过在终端中输入以下命令来安装: npm install vue-cropperjs croppe…

    Vue 2023年5月27日
    00
  • Vue按时间段查询数据组件使用详解

    关于“Vue按时间段查询数据组件使用详解”的完整攻略,我来详细讲解如下: 一、背景 在开发Web应用程序时,常常需要按时间段查询数据。如果每个查询功能都自己写一遍,那代码量会非常庞大,而且不利于维护和更新。为了更高效地开发查询功能,本文将介绍一种Vue组件的开发,该组件可以根据指定的时间段来查询数据。 二、组件设计 我们将设计一个“按时间段查询数据”的Vue…

    Vue 2023年5月29日
    00
  • vue中动态添加style样式的几种写法总结

    当我们在Vue中需要动态添加样式时,我们可以使用以下几种方法: 使用class绑定 Vue中可以使用:class或者:v-bind指令将一个变量与class属性绑定起来,这样我们可以通过改变变量的值来改变元素的class属性,从而改变样式。 <template> <div :class="{ ‘selected’: isSelec…

    Vue 2023年5月27日
    00
  • vue滚动插件better-scroll使用详解

    Vue 滚动插件 Better-Scroll 使用详解 插件介绍 Better-Scroll 是一款使用原生 JS 实现的插件,专门用于创建滚动效果的插件。 支持 Vue、React、Angular 等主流框架。 优点: 轻量、流畅、具有很好的兼容性、可以自定义样式和配置。 安装 可以使用 npm 安装 Better-Scroll 。 npm install…

    Vue 2023年5月27日
    00
  • vue3组合式api实现v-lazy图片懒加载的方法实例

    下面我来详细讲解一下“vue3组合式api实现v-lazy图片懒加载的方法实例”的完整攻略。 1. 初步了解Vue3中的组合式API 在Vue3中,使用组合式API可以更加灵活地组织逻辑代码,将逻辑代码与UI组件的逻辑分离,使得组件更加清晰、易于维护。组合式API中重要的概念有:响应式数据、ref、reactive、setup等。 在使用组合式API时,需要…

    Vue 2023年5月28日
    00
  • vue 获取及修改store.js里的公共变量实例

    获取和修改vue中的全局变量通常需要使用Vuex。Vuex是一个专业用于管理Vue应用中的状态(state)的库。它支持将状态集中在单个位置中,以便更轻松地进行管理和交互。 下面是如何在vue中获取和修改store.js里的公共变量实例的详细攻略: 安装依赖 为了使用Vuex,您需要先安装它。您可以在项目中使用以下命令安装它: npm install vue…

    Vue 2023年5月27日
    00
  • vue中的计算属性传参

    下面就为大家介绍一下“Vue中的计算属性传参”。 什么是Vue中的计算属性传参 在Vue中,我们经常需要对数据进行处理,得出一个新的值,这就是计算属性的作用。计算属性是Vue中一个非常常用的特性,它的作用是根据现有的数据来计算新的数据。在一些复杂的数据计算场景中,我们可能还需要用到计算属性传参的方式来实现更加复杂的计算。 如何在Vue中使用计算属性传参 Vu…

    Vue 2023年5月28日
    00
  • 使用 Jest 和 Supertest 进行接口端点测试实例详解

    使用 Jest 和 Supertest 进行接口端点测试是一种常见的自动化测试方式,有助于提高开发和测试效率,以下是具体的实例攻略。 准备工作 在开始测试之前,我们需要先安装相关的环境和库,具体包括: 安装 Node.js 在 Node.js 官网 https://nodejs.org/en/ 上下载对应的版本并安装。 创建项目 在命令行中通过 npm 命令…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部