您的位置:首页 > 新闻 > 热点要闻 > 个人房产信息网上查询系统_windows软件开发_前端seo怎么优化_如何建网站要什么条件

个人房产信息网上查询系统_windows软件开发_前端seo怎么优化_如何建网站要什么条件

2025/1/10 0:48:26 来源:https://blog.csdn.net/dongxiaod1/article/details/145002540  浏览:    关键词:个人房产信息网上查询系统_windows软件开发_前端seo怎么优化_如何建网站要什么条件
个人房产信息网上查询系统_windows软件开发_前端seo怎么优化_如何建网站要什么条件

文章目录

  • 描述
  • 原因
  • 问题重现
  • 解决方案
    • 方法一
    • 方法二
  • 总结

描述

第一次进入页面,不做任何操作,点击重置按钮,再进行下拉选择,输入框并不能回显数据,点击搜索后,选中的数据就能显示出来。

请添加图片描述

重置代码,resetForm的底层用的是表单的resetFields。

resetFields的作用:对整个表单进行重置,将所有字段重置为初始值(而不是设置为空值)并移除校验结果

注意:一定要加上prop,否则无法清除

    // 重置按钮操作resetQuery: _.debounce(function () {//重置表单this.resetForm("queryForm");//搜索this.handleQuery();}, 500),

在这里插入图片描述

原因

表单绑定的是搜索的对象内容,而表单的内容使用的是v-model来绑定,如果没给表单内容初始值,那么绑定的内容就不是响应式,打印出来也可以看见。所以就会出现搜索后才会回显选中的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这时候就有两种解决方法

  1. 给表单初始值,让它变成响应式,但是如果表单内容有100个的话,得一个个加。
  2. 清空的时候,不必使用表单的清除属性resetField,而是使用封装好的清空对象方法。

问题重现

这里只给了请假类型初始值,而未给请假方式初始值。

请添加图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<template><div style="margin-top: 100px"><el-form:model="form"ref="ruleForm"label-width="100px"class="demo-ruleForm"><el-form-item label="请假类型" prop="leaveType"><el-select v-model="form.leaveType" placeholder="请选择请假类型"><el-option label="事假" value="1"></el-option><el-option label="病假" value="2"></el-option></el-select></el-form-item><el-form-item label="请假方式" prop="leaveWay"><el-select v-model="form.leaveWay" placeholder="请选择请假方式"><el-option label="单次请假" value="1"></el-option><el-option label="长期请假" value="2"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" @click="submitForm('ruleForm')">确定</el-button><el-button @click="resetForm('ruleForm')">重置</el-button></el-form-item></el-form></div>
</template><script>
export default {data() {return {form: {leaveType: "",},};},methods: {resetForm(formName) {console.log("form", this.form);this.$refs[formName].resetFields();},},
};
</script><style lang="scss" scoped></style>

解决方案

方法一

给表单初始值,让它变成响应式,可以很明显地看到表单的初始化内容,都有响应式。

form: {leaveType: "",leaveWay: "",},

在这里插入图片描述

缺点是需要一个个加,很费时间。

方法二

不使用表单的resetFields清空表单,而是使用清空对象的cleanObject方法。

<template><div style="margin-top: 100px"><el-form:model="form"ref="ruleForm"label-width="100px"class="demo-ruleForm"><el-form-item label="请假类型" prop="leaveType"><el-select v-model="form.leaveType" placeholder="请选择请假类型"><el-option label="事假" value="1"></el-option><el-option label="病假" value="2"></el-option></el-select></el-form-item><el-form-item label="请假方式" prop="leaveWay"><el-select v-model="form.leaveWay" placeholder="请选择请假方式"><el-option label="单次请假" value="1"></el-option><el-option label="长期请假" value="2"></el-option></el-select></el-form-item><el-form-item><el-button type="primary">确定</el-button><el-button @click="resetForm(form)">重置</el-button></el-form-item></el-form></div>
</template><script>
export default {data() {return {form: {},};},methods: {resetForm(formName) {this.cleanObject(formName);},cleanObject(obj) {// 判断对象是否为非对象或nullif (typeof obj !== "object" || obj === null) {return obj;}// 判断对象是否为数组if (Array.isArray(obj)) {// 递归处理数组中的每个元素return obj.map((item) => this.cleanObject(item));}// 如果是对象,则遍历其属性for (const key in obj) {// 判断值是否为数组if (Array.isArray(obj[key])) {// 如果是数组,则将其置为空数组obj[key] = [];} else {// 递归处理对象中的每个值obj[key] = this.cleanObject(obj[key]);}}},},
};
</script><style lang="scss" scoped></style>

总结

实际场景用方法二会比较好点,如果有100个下拉框,给初始值的话,那你就要给100个内容进行初始化,很浪费时间。在vue3中也存在这样的情况,不知道这是不是resetFields遗留下来的bug,还需要看一下resetFields的源码。具体的原理还需要大家在评论区进行补充,附上vue3试验的代码。

<template><el-form :model="form" ref="form" label-width="100px" class="demo-ruleForm"><el-form-item label="请假类型" prop="leaveType"><el-select v-model="form.leaveType" placeholder="请选择请假类型"><el-option label="事假" value="1"></el-option><el-option label="病假" value="2"></el-option></el-select></el-form-item><el-form-item label="请假方式" prop="leaveWay"><el-select v-model="form.leaveWay" placeholder="请选择请假方式"><el-option label="单次请假" value="1"></el-option><el-option label="长期请假" value="2"></el-option></el-select></el-form-item><el-form-item><el-button type="primary">确定</el-button><el-button @click="resetForm(form)">重置</el-button></el-form-item></el-form>
</template><script setup>
import { ref } from "vue";const form = ref({});const resetForm = (formEl) => {if (!formEl) return;formEl.resetFields();
};
</script>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com