| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import { createApp, Component } from 'vue';
- import { isFunction, isString } from '../util';
- export const CreateComponent = (options: any, component: any) => {
- let elWarp: HTMLElement = document.body;
- const teleport = (options.teleport as string) || 'body';
- if (teleport != 'body') {
- if (isString(teleport)) {
- elWarp = document.querySelector(teleport) as HTMLElement;
- } else {
- elWarp = options.teleport as HTMLElement;
- }
- }
- const root = document.createElement('view');
- const name = component.name ? component.name + '-' : '';
- const id1 = options.id || new Date().getTime();
- root.id = name + id1;
- let Wrapper = {};
- if (isFunction(component.wrapper)) {
- Wrapper = component.wrapper(elWarp, root);
- } else {
- Wrapper = component.wrapper;
- }
- const instance: Component = createApp(Wrapper, options);
- const componens = component.components;
- componens &&
- componens.forEach((comp: Component) => {
- instance.use(comp);
- });
- elWarp.appendChild(root);
- return {
- instance: instance.mount(root),
- unmount: () => {
- instance.unmount();
- elWarp.removeChild(root);
- }
- };
- };
|