yanzhen-design-vue
Version:
44 lines (43 loc) • 1.01 kB
JavaScript
import { render, h } from "vue";
import { uniqueId } from "lodash-es";
const closeComponent = (element) => {
var _a;
if (element) {
render(null, element);
(_a = document.body) == null ? void 0 : _a.removeChild(element);
}
};
const openComponent = async ({
component,
props = {},
element,
appContext
}) => {
var _a, _b;
if (!component) return;
if (!element) {
element = document.createElement("div");
element.className = uniqueId();
}
try {
if (typeof component === "function") {
component = (_a = await component()) == null ? void 0 : _a.default;
}
const vnode = h(component, props);
if (appContext) {
vnode.appContext = appContext;
}
render(vnode, element);
(_b = document.body) == null ? void 0 : _b.appendChild(element);
vnode.close = () => {
closeComponent(element);
};
return vnode;
} catch (error) {
console.error("创建组件失败:", error);
}
};
export {
closeComponent,
openComponent
};