# All files / src/wx-mini utils.ts

17.39% Statements 4/23
0% Branches 0/20
0% Functions 0/4
17.39% Lines 4/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    484x

    4x

    4x

    4x

     import { setUrlQuery, variableTypeDetection } from '@/utils'

    /**
     * 获取wx当前route的方法
     * 必须是在进入Page或Component构造函数内部才能够获取到currentPages
     * 否则都是在注册Page和Component时执行的代码，此时url默认返回'App'
     */
    export function getCurrentRoute() {
      if (!variableTypeDetection.isFunction(getCurrentPages)) {
        return ''
      }
      const pages = getCurrentPages() // 在App里调用该方法，页面还没有生成，长度为0
      if (!pages.length) {
        return 'App'
      }
      const currentPage = pages.pop()
      return setUrlQuery(currentPage.route, currentPage.options)
    }

    /**
     * 后退时需要计算当前页面地址
     * @param delta 返回的页面数，如果 delta 大于现有页面数，则返回到首页
     */
    export function getNavigateBackTargetUrl(delta: number | undefined) {
      if (!variableTypeDetection.isFunction(getCurrentPages)) {
        return ''
      }
      const pages = getCurrentPages() // 在App里调用该方法，页面还没有生成，长度为0
      if (!pages.length) {
        return 'App'
      }
      delta = delta || 1
      const toPage = pages[pages.length - delta]
      return setUrlQuery(toPage.route, toPage.options)
    }

    /**
     * 返回包含id、data字符串的标签
     * @param e wx BaseEvent
     */
    export function targetAsString(e: WechatMiniprogram.BaseEvent): string {
      const id = e.currentTarget?.id ? ` id="${e.currentTarget?.id}"` : ''
      const dataSets = Object.keys(e.currentTarget.dataset).map((key) => {
        return `data-${key}=${e.currentTarget.dataset[key]}`
      })
      return `<element ${id} ${dataSets.join(' ')}/>`
    }