page.js 1.9 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3
import {
  initWebview,
  createWebview
fxy060608's avatar
fxy060608 已提交
4 5
} from './webview/index'

Q
qiang 已提交
6 7
import tabBar from '../framework/tab-bar'

fxy060608's avatar
fxy060608 已提交
8
const pages = []
fxy060608's avatar
fxy060608 已提交
9

fxy060608's avatar
fxy060608 已提交
10 11 12 13
export function getCurrentPages (returnAll) {
  return returnAll ? pages.slice(0) : pages.filter(page => {
    return !page.$page.meta.isTabBar || page.$page.meta.visible
  })
fxy060608's avatar
fxy060608 已提交
14
}
fxy060608's avatar
fxy060608 已提交
15

fxy060608's avatar
fxy060608 已提交
16 17 18
/**
 * 首页需要主动registerPage,二级页面路由跳转时registerPage
 */
fxy060608's avatar
fxy060608 已提交
19 20
export function registerPage ({
  path,
fxy060608's avatar
fxy060608 已提交
21
  query,
fxy060608's avatar
fxy060608 已提交
22
  openType,
fxy060608's avatar
fxy060608 已提交
23
  webview
fxy060608's avatar
fxy060608 已提交
24 25
}) {
  const routeOptions = JSON.parse(JSON.stringify(__uniRoutes.find(route => route.path === path)))
fxy060608's avatar
fxy060608 已提交
26

fxy060608's avatar
fxy060608 已提交
27 28 29
  if (openType === 'reLaunch' || pages.length === 0) {
    // pages.length===0 表示首页触发 redirectTo
    routeOptions.meta.isQuit = true
Q
qiang 已提交
30 31
  } else if (!routeOptions.meta.isTabBar) {
    routeOptions.meta.isQuit = false
fxy060608's avatar
fxy060608 已提交
32 33
  }

fxy060608's avatar
fxy060608 已提交
34
  if (!webview) {
fxy060608's avatar
fxy060608 已提交
35
    webview = createWebview(path, routeOptions)
36 37
  } else {
    webview = plus.webview.getWebviewById(webview.id)
fxy060608's avatar
fxy060608 已提交
38 39
  }

fxy060608's avatar
fxy060608 已提交
40 41 42 43 44
  if (routeOptions.meta.isTabBar) {
    routeOptions.meta.visible = true
  }

  if (routeOptions.meta.isTabBar && webview.id !== '1') {
Q
qiang 已提交
45
    tabBar.append(webview)
fxy060608's avatar
fxy060608 已提交
46 47
  }

fxy060608's avatar
fxy060608 已提交
48 49 50
  if (process.env.NODE_ENV !== 'production') {
    console.log(`[uni-app] registerPage`, path, webview.id)
  }
fxy060608's avatar
fxy060608 已提交
51

fxy060608's avatar
fxy060608 已提交
52 53 54
  initWebview(webview, webview.id === '1' && routeOptions)

  const route = path.slice(1)
fxy060608's avatar
fxy060608 已提交
55

fxy060608's avatar
fxy060608 已提交
56
  webview.__uniapp_route = route
fxy060608's avatar
fxy060608 已提交
57

fxy060608's avatar
fxy060608 已提交
58
  pages.push({
fxy060608's avatar
fxy060608 已提交
59
    route,
fxy060608's avatar
fxy060608 已提交
60
    options: Object.assign({}, query || {}),
fxy060608's avatar
fxy060608 已提交
61 62 63
    $getAppWebview () {
      return webview
    },
fxy060608's avatar
fxy060608 已提交
64 65 66 67
    $page: {
      id: parseInt(webview.id),
      meta: routeOptions.meta,
      path,
fxy060608's avatar
fxy060608 已提交
68 69 70 71 72 73 74 75 76 77 78
      route,
      openType
    },
    $remove () {
      const index = pages.findIndex(page => page === this)
      if (index !== -1) {
        pages.splice(index, 1)
        if (process.env.NODE_ENV !== 'production') {
          console.log(`[uni-app] removePage`, path, webview.id)
        }
      }
fxy060608's avatar
fxy060608 已提交
79
    }
fxy060608's avatar
fxy060608 已提交
80
  })
fxy060608's avatar
fxy060608 已提交
81 82

  return webview
83
}