getCurrentPages.ts 1.1 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
import { getCurrentPage } from '@dcloudio/uni-core'
fxy060608's avatar
fxy060608 已提交
2
import { formatLog } from '@dcloudio/uni-shared'
fxy060608's avatar
fxy060608 已提交
3 4 5 6 7 8 9 10
import { ComponentPublicInstance } from 'vue'

const pages: ComponentPublicInstance[] = []

export function addCurrentPage(page: ComponentPublicInstance) {
  pages.push(page)
}

fxy060608's avatar
fxy060608 已提交
11 12 13 14
export function getAllPages() {
  return pages
}

fxy060608's avatar
fxy060608 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27
export function getCurrentPages() {
  const curPages: ComponentPublicInstance[] = []
  pages.forEach((page) => {
    if (page.__isTabBar) {
      if (page.$.__isActive) {
        curPages.push(page)
      }
    } else {
      curPages.push(page)
    }
  })
  return curPages
}
fxy060608's avatar
fxy060608 已提交
28

fxy060608's avatar
fxy060608 已提交
29
export function removeCurrentPage() {
fxy060608's avatar
fxy060608 已提交
30 31 32 33 34
  const page = getCurrentPage() as ComponentPublicInstance
  if (!page) {
    return
  }
  removePage(page)
fxy060608's avatar
fxy060608 已提交
35 36
}

fxy060608's avatar
fxy060608 已提交
37 38 39
export function removePage(
  curPage: ComponentPublicInstance | Page.PageInstance
) {
fxy060608's avatar
fxy060608 已提交
40 41 42 43 44
  const index = pages.findIndex((page) => page === curPage)
  if (index === -1) {
    return
  }
  if (!curPage.$page.meta.isNVue) {
fxy060608's avatar
fxy060608 已提交
45
    ;(curPage as ComponentPublicInstance).$.appContext.app.unmount()
fxy060608's avatar
fxy060608 已提交
46 47 48 49 50 51
  }
  pages.splice(index, 1)
  if (__DEV__) {
    console.log(formatLog('removePage', curPage.$page))
  }
}