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

Vue3动态表单实现

实现方法:通过<component  />标签动实现动态表单渲染

component标签:

在vue中 component 标签用于动态组件标签的渲染。它允许在同一个挂载点上条件渲染不同的组件,通过is属性可以渲染指定的属性

在上面的例子中,通过调用函数applyCom实现在页面上渲染Com2组件

动态表单渲染(Vue3 + ElementPlus)

* 文件列表

* widgets/index.js

在index.js中导入所有的表单元素组件

export { default as WidgetInput } from "./input.vue";

export { default as WidgetTextarea } from "./textarea.vue";

export { default as WidgetSelect } from "./select.vue";

export { default as WidgetRadio } from "./radio.vue";

export { default as WidgetUpdate } from "./upload.vue";

* widgets/input.vue

<template>
  <div>
    <el-input v-model="model" style="width: 240px" v-bind="$attrs"  />
  </div>
</template>

<script setup>
import { ref } from "vue";

const props = defineProps({
    modelValue:{
        type:Number
    }
})

const emits = defineEmits(['update:modelValue']);

const model = useVModel(props,'modelValue',emits);
</script>

1. 通过v-model确保数据的单向流

2. $attrs: 当想要将所有未声明的属性都是用在组件上可以使用,那么这里就会将component组件上的绑定的v-bind的数据全部应用到input这个组件之上。

* form.vue


<template>
  <ElForm ref="formRef" labelPosition="top" @submit.prevent>
    <ElFormItem v-for="(item, index) in arr" :key="index">
      <component
        :is="getWidgetByName(item.name)"
        v-model="item.value"
        v-bind="item.apply"
      />
    </ElFormItem>
  </ElForm>
</template>
<script setup>
import * as widgets from "./widgets";

let arr = [
  {
    name: "WidgetInput",
    value: 1,
    apply: {
      placeholder: "请输入数字",
    },
  },
  {
    name: "WidgetInput",
    value: 2,
    apply: {
      placeholder: "请输入数字",
    },
  },

  {
    name: "WidgetSelect",
    value: 3,
    apply: {
      placeholder: "请输入数字",
    },
  },
];
const getWidgetByName = (name) => {
  return widgets[name];
};
</script>


http://www.kler.cn/a/442631.html

相关文章:

  • Flink 应用
  • Java 面试题 - ArrayList 和 LinkedList 的区别,哪个集合是线程安全的?
  • 【STM32】HAL库USB实现软件升级DFU的功能操作及配置
  • 《零基础Go语言算法实战》【题目 2-30】并发安全问题
  • 【C++】多线程
  • 新手如何练习SQL?|掌握
  • 游戏关卡分析:荒野大镖客2雪山终战
  • 探索高级 SQL 技巧:提升数据库操作效率
  • MyBatis学习笔记:进阶知识2
  • World-Grounded Human Motion Recovery via Gravity-View Coordinates
  • Unity NTPComponent应用, 实现一个无后端高效获取网络时间的组件
  • 云计算笔记
  • 基于AI对话生成剧情AVG游戏
  • 数据结构之顺序存储二叉树
  • kubernetes学习-应用程序的生命周期管理
  • 【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举
  • SEO初学者-SEO基础
  • 《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制
  • 在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。
  • STM32 IIC协议实现
  • 银行金融项目测试+常问面试题(附答案)
  • XXE-Lab for PHP
  • uniapp scroll-view 不生效排查
  • RT-Thread 的时钟管理
  • 3_使用 HTML5 Canvas API (2) --[HTML5 API 学习之旅]
  • Qt之自定义标题栏拓展(十)