vue3 自定义调控参数-简易生成器

vue3 自定义调控参数-简易生成器

  • 此功能好像是某厂的在线视频笔试题,当时写完也没有结果。。。
  • 我觉得此 demo 适用场景:自定义动态表单时需要定制字段、用户自定义信息等

封装生成器控件如下

//创建CustomControlParams.vue 文件, 内容如下
<template>
    <div v-for="(item, index) in keyValArr">
        <input type="text" v-model="item.prop" @input="setObj" />
        <span>:</span>
        <input type="text" v-model="item.value" @input="setObj" />
        <button @click="() => onDelete(item.id)">删除</button>
    </div>
    <button @click="onAdd">新增字段</button>
</template>

<script lang="ts" setup>
import { onMounted, ref } from "vue";

//获取随机字符串 32uuid
const getRandomStr = (length = 32) => {
    const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    const maxPos = chars.length;
    let _string = "";
    for (let i = 0; i < length; i++) {
        _string += chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return _string;
}

const props = defineProps({
    customeKeyValue: {
        type: Object,
        default: {}
    }
});

const emits = defineEmits(["update:customeKeyValue"]);

//对象映射成数组,方便操作
const keyValArr = ref<{
    id: string;
    prop: string;
    value: any;
}[]>([]);

//初始转换
onMounted(() => {
    keyValArr.value = Object.keys(props.customeKeyValue).map(prop => ({
        id: getRandomStr(),
        prop,
        value: props.customeKeyValue[prop]
    }));
});

//操作值变化时,同步修改
const setObj = () => {
    let newCustomeKeyValue = {} as any;
    keyValArr.value.map(item => {
        newCustomeKeyValue[item.prop] = item.value;
    });
    emits("update:customeKeyValue", newCustomeKeyValue);
};

//删除
const onDelete = (prop: string) => {
    keyValArr.value = keyValArr.value.filter(item => item.prop !== prop);
    setObj();
};

//添加
const onAdd = () => {
    keyValArr.value.push({
        id: getRandomStr(),
        prop: 'Custom' + Date.now(),
        value: ""
    });
    setObj();
};
</script>

父组件使用如下:

<template>
  <h2>自定义调控参数</h2>
  <CustomControlParams v-model:customeKeyValue="formVal" />
  <div>{{ formVal }}</div>
</template>

<script setup lang="ts">
import { ref } from "vue";
import CustomControlParams from "./CustomControlParams.vue";
const formVal = ref<any>({
  MAX: 1,
  MIN: 2
})
</script>

结果如图:
在这里插入图片描述

  • 没有做相同属性 key 的校验,相同的默认会后定义覆盖之前定义。
  • demo 记录而已。不喜勿喷
    有疑问的同学可以私信我、对帮助到同学欢迎大家点赞、收藏评论。

相关推荐

  1. Vue中的定义参数校验

    2024-05-10 19:00:08       30 阅读
  2. vue3定义指令

    2024-05-10 19:00:08       36 阅读
  3. vue3定义指令

    2024-05-10 19:00:08       41 阅读
  4. VUE3 定义指令

    2024-05-10 19:00:08       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 19:00:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 19:00:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 19:00:08       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 19:00:08       20 阅读

热门阅读

  1. 程序链接和运行 - 笔记

    2024-05-10 19:00:08       10 阅读
  2. C++并发:线程函数传参(一)

    2024-05-10 19:00:08       11 阅读
  3. Linux查看Oracle数据库的环境变量

    2024-05-10 19:00:08       14 阅读
  4. python脚本实战

    2024-05-10 19:00:08       16 阅读
  5. MySQL导入导出详细教程

    2024-05-10 19:00:08       13 阅读
  6. Go 读取文件

    2024-05-10 19:00:08       12 阅读
  7. 【QEMU系统分析之实例篇(二十五)】

    2024-05-10 19:00:08       11 阅读
  8. C++ 杂项

    2024-05-10 19:00:08       9 阅读
  9. React中间件的概念以及常用的实现

    2024-05-10 19:00:08       10 阅读
  10. linux 权限和权限的设置

    2024-05-10 19:00:08       10 阅读