Ai
1 Star 2 Fork 1

旻天信息/mttk-vue-wrap

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
dynamicRender.ts 1.68 KB
一键复制 编辑 原始数据 按行查看 历史
旻天信息 提交于 2025-02-06 16:44 +08:00 . v0..3.0
import { createVNode, render} from 'vue'
import type { AppContext } from 'vue'
import MttkWrapComp from './MttkWrapComp.vue'
import {WrapConfigType,DynamicRenderOptionType} from './types'
//config:
//options
//appendTo: where to append,null will append to root(document.body),it can be a string or html element
//removeEvent: if provide, this event will automatically trigger remove handler to remove appended div
export default function dynamicRender(config:WrapConfigType, appContext: AppContext, options :DynamicRenderOptionType) {
const mountNode = document.createElement('div')
const appendTo = getAppendToElement()
const remove = function () {
render(null, mountNode)
appendTo.removeChild(mountNode)
}
//Record the info returned by init event
let contextWrap=undefined;
function handleInitWrap(contextWrapNew:any){
contextWrap=contextWrapNew
}
const vNode = createVNode(MttkWrapComp, { config: getConfig(),onInitWrap:handleInitWrap })
//
vNode.appContext = appContext
//
render(vNode, mountNode)
appendTo.appendChild(mountNode)
//
return { remove, mountNode, vNode ,contextWrap}
function getConfig() {
const removeEvent = options.removeEvent
if (!removeEvent) {
return config
}
//
const configModified = { ...config }
configModified['@' + removeEvent] = remove
//
// console.log(configModified)
return configModified
}
function getAppendToElement() {
const appendTo:any = options.appendTo
if (appendTo) {
if (typeof appendTo == 'string') {
return document.querySelector(appendTo)
}
if (appendTo instanceof Element) {
return appendTo
}
}
return document.body
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
TypeScript
1
https://gitee.com/jamie0828/mttk-vue-wrap.git
git@gitee.com:jamie0828/mttk-vue-wrap.git
jamie0828
mttk-vue-wrap
mttk-vue-wrap
master

搜索帮助