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

vue3将自定义组件插入指定dom

需求简要描述

页面渲染了一个 id 为 videoPlayerId 的div盒子,代码自定义了一个名为CustomComponent 的组件,现在需要在vue3中,通过纯 js 的方式将组件 CustomComponent 插入 videoPlayerId 的div中,作为其子节点。

实现代码

CustomComponent 组件

<template><div>我是CustomComponent,接收到的参数是{{params}}</div><button @click="clickButton"></button>
</template><script setup>const props = defineProps({params: {type: String,default: ''}//监听按钮被点击const clickButton = () => {emits('clickButton')}const emits = defineEmits(['clickButton'])})
</script>

待插入节点的页面代码

<template><div id="videoPlayerId"></div>
</template><script setup>//将自定义组件插入divconst insertNode = () => {const container = document.getElementById('videoPlayerId')//创建一个文档碎片节点,插入它的所有子孙节点const fragment = document.createDocumentFragment()//创建自定义组件的应用对象,并挂在到文档碎片节点上const pop = createApp(CustomComponent, {params: "动态写入的参数",//绑定的监听函数要在前面加 on,标识监听onClickButton: () => clickButton(),}).mount(fragment)container.append(pop.$el)}onMounted(() => {insertNode()})
</script>

业务补充说明

在真实且完整的业务场景中,videoPlayerId 的 div 会在点击按钮后,被别的地方动态清空,并写入新的代码,所以 CustomComponent 需要在 videoPlayerId 每次被刷新后都重新写入。

试错记录

createApp + mount
相当于将 CustomComponent 创建为Dom,取其 $el 中的 dom 渲染到页面上,可以完美实现上述场景。

render
相当于将 CustomComponent 创建为 VDom,在 videoPlayerId 被刷新后不会重新渲染,因此只有在页面初始化时,才能成功将 CustomComponent 插入 videoPlayerId,videoPlayerI 被刷新后,render 不会被重新执行。

http://www.lryc.cn/news/364947.html

相关文章:

  • flutter封装日历选择器(单日选择)
  • SwiftUI调用相机拍照
  • elasticsearch (dsl)
  • 聊聊大模型微调训练全流程的思考
  • Python变量符号:深入探索与实用指南
  • 实验八 页面置换模拟程序设计
  • Spring类加载机制揭秘:深度解析“卸载”阶段
  • Jupyter Notebook快速搭建
  • Linux C语言:数组的定义和初始化
  • spring框架限制接口是否要登录过才能访问
  • 【全开源】废品回收垃圾回收小程序APP公众号源码PHP版本
  • 勒索软件分析_目标文件扫描行为分析
  • 2024050401-重学 Java 设计模式《实战代理模式》
  • HTML跨年烟花
  • 微服务第二轮
  • 线性模型-分类
  • OpenAI前董事会成员称Sam Altman因 “ 向董事会撒谎 ” 而被解雇
  • 【启明智显分享】WIFI6开发板ZX6010:开源OpenWrt SDK,接受定制!
  • C语言能否使⽤ fflush( ) 函数清除多余的输⼊?
  • 如何把试卷上的字去掉再打印?分享三种方法
  • Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)
  • 手机站怎么推广
  • Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value
  • YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]
  • 02JAVA字符串和集合
  • Qt如何让按钮的菜单出现在按钮的右侧
  • C++的类和new和delete和菱形继承机制
  • Redis教程(二十二):Redis的过期删除和缓存淘汰策略
  • Lodop 实现局域网打印
  • HarmonyOS(二十四)——Harmonyos通用事件之触摸事件