当前位置: 首页 > backend >正文

vue2使用el-form动态参数展示并非空校验

需求:需要根据类型type动态显示某些参数,并且后端需要的参数也不同,比如type为1:后端要aa和bb参数,type为2:后端要cc和dd参数,前端显示的字段名也不一样,但是样式是不变的。

1.效果

2.主要代码讲解

因为vue的限制,所以需要使用this.$set让数组变为响应式,不然会导致输入框输入不了

      handleChange(value) {let params = {1: [{label: '姓名',name: ''},{label: '年龄',age: ''}],2: [{label: '开始时间',start: ''},{label: '结束时间',end: ''}]};this.$set(this.formObj, 'paramsList', params[value]);},

这句话的意思就是在对象中找到不是label的属性

 v-model="formObj.paramsList[index][Object.keys(item).find((key) => key !== 'label')]"

可以打印一下输出,结果是name

   let aa = Object.keys({label: '姓名',name: ''}).find((key) => key !== 'label');console.log(aa);//name

3.完整代码

<!--* @Description:* @Author: guoxiaxue* @Date: 2025-04-27 14:56:56* @FilePath: \vue-secondMenu-test-master\src\page\test4\zongti\01.Deepseek.vue
-->
<template><div style="margin-top: 40px"><el-select v-model="selectedOptions" clearable placeholder="请选择" @change="handleChange"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option></el-select><el-form :model="formObj" ref="addBaseRef" label-width="95px" class="demo-ruleForm add-point-form" style="margin: 40px 0px"><el-descriptions labelClassName="labelClassName" direction="vertical" :column="5" border style="width: 500px"><el-descriptions-item :label="item.label" v-for="(item, index) in formObj.paramsList" :key="item.label" :span="1"><el-form-item:prop="`paramsList[${index}].${Object.keys(item).find((key) => key !== 'label')}`":rules="[{required: true,message: '',trigger: 'blur',message: `请输入${item.label}`}]"label-width="0px"><el-inputstyle="width: 167px"size="small"v-model="formObj.paramsList[index][Object.keys(item).find((key) => key !== 'label')]":placeholder="`请输入${item.label}`"></el-input></el-form-item></el-descriptions-item></el-descriptions></el-form><el-button type="primary" @click="submitForm('addBaseRef')">立即创建</el-button></div>
</template><script>
export default {data() {return {formObj: {paramsList: []},selectedOptions: 1,options: [{value: 1,label: '参数1'},{value: 2,label: '参数2'}]};},mounted() {this.handleChange(this.selectedOptions);},methods: {handleChange(value) {let params = {1: [{label: '姓名',name: ''},{label: '年龄',age: ''}],2: [{label: '开始时间',start: ''},{label: '结束时间',end: ''}]};this.$set(this.formObj, 'paramsList', params[value]);},submitForm(formName) {this.$refs[formName].validate((valid) => {if (valid) {alert('submit!');} else {console.log('error submit!!');return false;}});}}
};
</script><style lang="scss" scoped></style>

文章到此结束希望对你有所帮助~

http://www.xdnf.cn/news/18951.html

相关文章:

  • 数据结构青铜到王者第九话---二叉树(2)
  • 自下而上的树形dp
  • 深度学习——卷积神经网络(PyTorch 实现 MNIST 手写数字识别案例)
  • pcl_案例2 叶片与根茎的分离
  • 机器视觉学习-day09-图像矫正
  • Day30 多线程编程 同步与互斥 任务队列调度
  • leetcode_73 矩阵置零
  • 【LLM】Transformer模型中的MoE层详解
  • vue布局
  • 架构设计——云原生与分布式系统架构
  • Android中设置RecyclerView滑动到指定条目位置
  • 搜维尔科技核心产品矩阵涵盖从硬件感知到软件渲染的全产品供应链
  • 万博智云联合华为云共建高度自动化的云容灾基线解决方案
  • 【Python开源环境】Anaconda/Miniconda
  • 【数据结构与算法】(LeetCode)141.环形链表 142.环形链表Ⅱ
  • 重置 Windows Server 2019 管理员账户密码
  • 深入理解QLabel:Qt中的文本与图像显示控件
  • 国产的服务器
  • 机器学习回顾(一)
  • Day16_【机器学习—KNN算法】
  • 小白入门:支持深度学习的视觉数据库管理系统
  • 解构与重构:“真人不露相,露相非真人” 的存在论新解 —— 论 “真在” 的行为表达本质
  • c++ 观察者模式 订阅发布架构
  • Visual Scope (Serial_Digital_Scope V2) “串口 + 虚拟示波器” 工具使用记录
  • JavaScript中的BOM,DOM和事件
  • Spring Boot 实战:接入 DeepSeek API 实现问卷文本优化
  • 底层音频编程的基本术语 PCM 和 Mixer
  • 数据分析学习笔记4:加州房价预测
  • 腕上智慧健康管家:华为WATCH 5与小艺的智美生活新范式
  • 音频转PCM