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

vue3中使用h()函数加载elementPlus 组件

需求:后端返回一段html代码片段,前端页面直接渲染该片段,但是需要对代码片段中的一些、元素进行替换,比如,某个元素替换成 el-tree-select。 

import { h, render } from 'vue';
import { ElTreeSelect, ElSelect, ElOption, ElDatePicker, ElConfigProvider } from 'element-plus';
export const renderElTreeSelect = (el, data) => {
    // 递归构建部门树
    function buildDeptTree(parentId) {
        return data
            .filter((dept) => dept.deptParent === parentId) // 找到所有子节点
            .map((child) => ({
                ...child,
                children: buildDeptTree(child.deptId) // 递归构建子节点的子树
            }));
    }
    // 创建一个dom元素
    const dom = document.createElement('div');
    // 将元素插入到原本的元素之前
    el.before(dom);
    // 定义一个
    const comp = defineComponent({
        setup() {
            const selectedValue = ref('');
            const treeData = ref([]);
            // 获取组织机构树
            treeData.value = buildDeptTree(0);
            return () =>
                h(ElTreeSelect, {
                    // 树形数据
                    data: treeData.value,
                    // 唯一标识字段
                    nodeKey: 'deptId',
                    props: {
                        label: 'deptName'
                    },
                    // 绑定值
                    modelValue: selectedValue.value,
                    // 变更事件
                    'onUpdate:modelValue': (val) => {
                        el.attr('value', val);
                        selectedValue.value = val;
                    },
                    placeholder: '请选择部门'
                });
        }
    });
    // 渲染组件
    render(h(comp), dom);
    // 隐藏原来的组件:后面可能取值需要,暂定隐藏不删除
    el.hide();
};

相关文章:

  • 3个 Vue Scoped 的核心原理
  • Python中的*args和**kwargs:灵活参数处理的完全指南
  • Spring Boot 本地缓存工具类设计与实现
  • 【数据结构与算法】Java描述:第三节:栈与队列
  • 《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)
  • DeepSeek:中国AGI先锋,用技术重塑通用人工智能的未来
  • WPF基础知识61-80
  • 【python】模块和包相关知识
  • cpu 多级缓存L1、L2、L3 与主存关系
  • Easysearch 使用 AWS S3 进行快照备份与还原:完整指南及常见错误排查
  • 渗透测试之利用sql拿shell(附完整流程+防御方案)【下】
  • 本地搭建DeepSeek R1模型 + 前端
  • docker compose 以redis为例
  • 【2025前端高频面试题——系列一之MVC和MVVM】
  • vue3组合式API怎么获取全局变量globalProperties
  • 机器学习:愚者未完成的诗篇(零)
  • c#面试题整理8
  • (更新完)LPZero: Language Model Zero-cost Proxy Search from Zero
  • 多Agent博弈的场景:博弈是策略选择和均衡问题
  • Docker参数,以及仓库搭建
  • 尹锡悦宣布退出国民力量党
  • 中国证券业协会修订发布《证券纠纷调解规则》
  • 冰雹造成车损能赔吗?如何理赔?机构答疑
  • 威尼斯建筑双年展总策划:山的另一边有什么在等着我们
  • 外企聊营商|波音速度:创新审批促“起飞”
  • 英国首相斯塔默一处房产发生火灾