【vue3+elementplus】动态设置二次封装的el-form组件中的v-model绑定的变量名

2023-11-19

众所周知,在form表单中,el-select、el-input等需要使用v-model绑定变量,这个变量就是当前选择\输入的内容,一般会取ruleForm作为入参

<el-form
    ref="ruleFormRef"
    :model="ruleForm"
    inline
  >
    <el-form-item label="城市">
      <el-select v-model="">
        <el-option label="南京" :value="1" />
      </el-select>
    </el-form-item>  
</el-form>

如果想二次封装form表单,或者引用同一个form表单作为子组件,但是v-model绑定的字段名不固定,可以通过props传值的方式解决

过程:

  • modelkey是父组件传过来的变量,里面定义的就是el-form表单中的v-model绑定的字段名
// father.vue
<template>
	// 引入的子组件
	<Child :modelkey="['task_name', 'task_status']" />
</template>
// child.vue
<template>
	<el-form
	    ref="ruleFormRef"
	    :model="ruleForm"
	    inline
	  >
	    <el-form-item label="城市">
	    	/*
				正常v-model应该是写:v-model="ruleForm.task_name"
				但是task_name字段并不是固定的,可以在写modelkey的时候,按照el-form表单内容展示的顺序去写,就可以用下标一一对应上v-model要绑定的字段
			 */
		 {{ Object.keys(ruleForm)[0] }}   /* 这里打印一下,可以发现就是task_name*/
	      <el-select v-model="ruleForm[Object.keys(ruleForm)[0]]">
	        <el-option label="南京" :value="1" />
	      </el-select>
	    </el-form-item>  
	    <el-form-item label="状态">
	      <el-input v-model="ruleForm[Object.keys(ruleForm)[1]]">
	      </el-input >
	    </el-form-item> 
	</el-form>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue'

export default defineComponent({
	props: {
	   modelkey: {
	     type: [Array, Object, string],
	     default: null
	   },
	}
	setup(props: any) {
		let ruleForm = ref<any>({})
		// 1-如果modelkey是Array
		props.modelkey?.forEach((item) => {
	      ruleForm.value[item] = undefined   // 我把属性值设置为undefined,是因为某个变量没有输入值时,入参不传,可自行根据你项目要求去设置默认属性值
	    })
	    console.log(ruleForm.value)		// 此时拿到的ruleForm = { task_status: undefined, task_name: undefined },便实现了v-model绑定的字段名是动态设置的

		// 2-如果modelkey是Object
		Object.keys(props.modelkey)?.forEach((key) => {
			ruleForm.value[key] = undefined
		})
		
		// 最重要的一步是,v-model里面怎么写,去看template
	    
		return {
			ruleForm
		}
	}
})
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【vue3+elementplus】动态设置二次封装的el-form组件中的v-model绑定的变量名 的相关文章

随机推荐

  • 机器学习算法Python实现:tfidf 特征词提取及文本相似度分类

    coding utf 8 本代码主要实现了对于商品名称根据tfidf提取特征词 然后基于已经训练好的word2vec模型 对每行商品的tfidf值大于某一阈值的特征词相似度匹配已经给定的商品类别 import jieba import ji
  • 有趣算法之C++函数模板

    C 函数模板 20200924 原文链接 https www runoob com w3cnote c templates detail html 原文正在慢慢理解中 模板是C 支持参数化多态的工具 使用模板可以使用户为类或者函数声明一种一
  • Qt-信号和槽

    一 Qt信号和槽机制 emit的使用 一 相关概念 1 信号 Signal 就是在特定情况下被发射的事件 例如PushButton 最常见的信号就是鼠标单击时发射的 clicked 信号 一个 ComboBox 最常见的信号是选择的列表项变
  • 【SQLSERVER】 "in"的替换方法

    期望效果 select From Empoylee Where Address1 Address2 in Select Address1 Address2 From EmpoyleeAdresses Where Country Canada
  • iOS架构-组件化(项目框架搭建2)

    静态库引用静态库 如果像上图一样 直接在业务层组件引用数据层组件的文件 则会报错 因为组件之间没有建立引用关系 如下图 静态库如何引用Pods第三方库 拷贝Podfile文件到项目 打开终端执行pad install 直接引用Pod下面的Y
  • VC++6.0调试工具使用初步

    摘要 程序设计初者学会IDE 集成开发环境 中提供的调试工具 是一件非常重要的事 本文在初学者有初步的程序设计体验 只需要掌握到控制结构 为前提 介绍了单步执行 断点设置及观察程序运行情况的方法 并配有练习的建议 方便读者的学习 相关博文
  • HTTP协议头部与Keep-Alive模式详解

    转自 https www byvoid com zhs blog http keep alive header 1 什么是Keep Alive模式 我们知道HTTP协议采用 请求 应答 模式 当使用普通模式 即非KeepAlive模式时 每
  • Bootstrap导航

    Bootstrap 导航 1 定义导航组件 基本结构 ul class nav li class active a href 首页 a li li a href 导航标题1 a li li a href 导航标题2 a li ul 1 1
  • Code39码和Code93码的区别

    条形码可以标示出产品的生产国 制造厂家 图书分类号 邮件起止地点 类别 日期等许多信息 因而在很多领域都得到了广泛的应用 尤其是那些可以同时支持字母 数字 字符这些字符集的条码 比如Code39和Code93 都是可以支持多种字符集的条形码
  • ios游戏开发

    知识系统 英文教程网站 http www csdn net article 2012 12 20 2813035 game dev guide 开发类库 http www csdn net article 2012 11 07 281158
  • Jmeter动态吞吐量实现

    在容量测试时 控量 是非常重要的 JMeter 是根据线程数大小来控制压力强弱的 但我们制定的压测目标中的指标往往是吞吐量 QPS TPS 这就给测试人员带来了不便之处 必须一边调整线程数 一边观察 QPS TPS 达到什么量级了 为了解决
  • 本地视频播放器

    这是一个基于VUE Go做的一个本地视频播放器项目 欢迎fork或star 使用指南 本地开发 安装依赖 npm install 开发模式 npm run dev 打包 npm run build 启动后端 bee run 直接使用 解压
  • “条件递进式编程”技巧两例

    什么是 条件递进式编程 呵呵 这是我自己起的名字 所谓条件递进式编程 就是指需要一系列相关函数组合执行的情况下 后续函数执行的必要性由前面所有函数执行是否成功来决定 比如说 有一系列函数如下DoSomething1 DoSomething2
  • 端到端的图像压缩------《End-to-end optimized image compression》笔记

    End to end optimized image compression 简介 内容 整体算法结构以及流程如下 前向传播 变换优化问题 变分推导问题 实验结果 结论 论文地址 https arxiv org abs 1611 01704
  • 获取map中第一个key值

    获取map中第一个key值 param map 数据源 return public static String getKeyOrNull Map
  • SqliLabs Less26-26a

    第二十六关 GET类型基于你所有的空格和言论都是属于我的错误 1 判断注入点 根据提示 sql语句应该存在过滤 观察源代码发现存在or and 空格 斜杠过滤 绕过方法 Or and 采取双写绕过 注释过滤 采取and 1闭合语句绕过 空格
  • 获取url内的参数数据

    例如我们的页面 是含有参数的 类似于 www baidu com userdata 百度用户 我们想获得 url内的userdata的数据值 那么就需要 使用下方这个正则判断方式来进行计算 window location href 这个可以
  • SSM 基础面试题

    什么是 MyBatis 参考答案 1 MyBatis 是一个半自动 ORM 对象关系映射 框架 它内部封装了 JDBC 开发时只需要关注 SQL 语句本身 不需要花费精力去处理加载驱动 创建连接 创建 statement 等繁杂的过程 程序
  • VMware 中的 Ubuntu 虚拟机看不到共享文件夹怎么办?

    初学Linux 在VMWare 上装了Ubuntu14 04 主机端和虚拟机相互间的访问是必不可少的 途径有许多 其中vmware tool提供的共享文件夹方式简单又方便 然而 有时却莫名其妙的 在Ubuntu上看不到共享文件夹了 网上查了
  • 【vue3+elementplus】动态设置二次封装的el-form组件中的v-model绑定的变量名

    众所周知 在form表单中 el select el input等需要使用v model绑定变量 这个变量就是当前选择 输入的内容 一般会取ruleForm作为入参