define.ts 890 字节
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
import { once } from '@dcloudio/uni-shared'
import { createApp, defineComponent } from 'vue'
import { createPageNode, PageNodeOptions } from '../dom/Page'
import { setupPage } from './setup'

export type VueComponent = ReturnType<typeof defineComponent>

const pagesMap = new Map<string, ReturnType<typeof createFactory>>()

export function definePage(pagePath: string, component: VueComponent) {
  pagesMap.set(pagePath, once(createFactory(component)))
}

export function createPage(
  pageId: number,
  pagePath: string,
  pageQuery: Record<string, any>,
  pageInstance: unknown,
  pageOptions: PageNodeOptions
) {
  return createApp(pagesMap.get(pagePath)!(), {
    pagePath,
    pageQuery,
    pageInstance,
  }).mount(createPageNode(pageId, pageOptions) as unknown as Element)
}

function createFactory(component: VueComponent) {
  return () => {
    return setupPage(component)
  }
}