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

当使用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组合式API

    一篇文章看懂Vue组合式API 什么是Vue组合式API Vue组合式API是Vue 3中新增的语法特性,它提供了一种新的组件编写方式,能够更加优化组件的可复用性、可维护性和可测试性。与Vue 2.x的Options API相比,Vue 3.x的组合式API更加灵活且容易理解使用。本文将介绍Vue组合式API的使用方法。 setup函数 在使用Vue组合式A…

    Vue 2023年5月28日
    00
  • vue 3.0 使用ref获取dom元素的示例

    使用 ref 获取 DOM 元素是 Vue.js 3.0 新增的功能。下面是使用 ref 获取 DOM 元素的示例: 1. 在模板中使用 ref 在模板中使用 ref 可以方便地获取 DOM 元素及组件实例。下面是一个简单的示例,用于获取一个输入框 (<input>): <template> <div> <input…

    Vue 2023年5月29日
    00
  • 关于Vue组件库开发详析

    关于Vue组件库开发详析 Vue.js是一个流行的JavaScript框架,可以用于构建交互式Web界面。Vue组件库是我们可以在Vue应用程序中重复使用的一组可组合UI元素。 为什么要开发Vue组件库 提高开发效率:使用Vue组件库可以减少代码开发时间,提高开发效率,也有助于保持一致的UI风格。 易于维护:Vue组件库强制出现接口,降低维护成本,提高可重用…

    Vue 2023年5月27日
    00
  • vant使用datetime-picker组件设置maxDate和minDate的坑及解决

    关于“vant使用datetime-picker组件设置maxDate和minDate的坑及解决”的攻略,我整理了如下内容: 问题描述 在使用Vant组件库中的DateTimePicker组件时,需要设置maxDate和minDate参数控制可选范围。但是,这两个参数的设定并不是特别顺利,可能会出现一些问题,例如: 输入的日期不符合要求,仍然可以选择 只有时…

    Vue 2023年5月29日
    00
  • 使用Vue.$set()或者Object.assign()修改对象新增响应式属性的方法

    使用Vue.js时,我们通常会遇到在组件渲染时需要动态新增响应式属性的情况。Vue提供了两种方式使对象属性(非响应式的)能被监听到,即Vue.$set()和Object.assign()。 使用Vue.$set()方法 Vue.$set()方法是Vue.js提供的Vue实例方法,用于响应式地向已有对象添加新的属性,或修改已有属性的值。这个方法的第一个参数是目…

    Vue 2023年5月28日
    00
  • Vue2 的 diff 算法规则原理详解

    Vue2 的 diff 算法规则原理详解 什么是 diff 算法? 在前端框架中,常常需要比较新旧虚拟 DOM 树来确定需要更新的节点,以此进行更新操作。而这个过程就被称之为 diff(差异)算法。 diff 算法通过比较两棵 DOM 树的差异,把更新的内容应用到真实 DOM 上,最终展示出最新的页面。这个过程其实也是整个前端框架的核心思想,而 Vue2 中…

    Vue 2023年5月27日
    00
  • Vue实现插槽下渲染dom字符串的使用

    当我们在使用Vue时,我们经常会用到插槽,它可以让我们在组件中定义一些可重用的模板代码。然而,有时候我们需要在插槽中插入一些动态生成的DOM字符串,Vue并没有提供直接的方式来完成这个操作,此时我们可以使用v-html指令和render函数来实现。 使用v-html指令 使用v-html指令可以将一个字符串作为HTML代码进行渲染,这个过程和在模板中使用双括…

    Vue 2023年5月27日
    00
  • vue构建动态表单的方法示例

    Sure,让我来详细讲解一下“vue构建动态表单的方法示例”的完整攻略。 首先,需要了解动态表单是什么?动态表单是指根据数据模型自动生成表单,可以通过配置数据模型来快速地构建表单,例如业务需要由于某个字段打回重填,再次提交时可能该字段并不需要填写。这时候就需要一个动态表单来依据条件来进行表单的构建。 接下来我们开始讲解攻略,主要分为以下四个步骤: 步骤一:数…

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