import { camelize } from 'uni-shared' const components = ['SystemAsyncLoading', 'SystemAsyncError'] export function isPage (vm) { if (vm.$parent && vm.$parent.$options.name === 'PageBody') { if (components.indexOf(vm.$options.name) !== -1) { return false } return true } return false } export function hasLifecycleHook (vueOptions = {}, hook) { return Array.isArray(vueOptions[hook]) && vueOptions[hook].length } export function normalizeDataset (dataset = {}) { // ios8.x,9.x Object.assign({},dataset) 始终返回 {} // http://ask.dcloud.net.cn/question/70246 const result = JSON.parse(JSON.stringify(dataset)) if (__PLATFORM__ === 'h5') { const keys = Object.keys(result) const len = keys.length if (len) { // remove data-v- for (let i = 0; i < len; i++) { const key = keys[i] const len = key.length if (key.substr(0, 1) === 'v' && (len === 9 || len === 10)) { delete result[key] } } } } return result } export function getTargetDataset (target) { let dataset = {} const vm = target.__vue__ function updateDataset (vm, force) { const $attrs = vm.$attrs for (const key in $attrs) { if (key.startsWith('data-')) { const newKey = camelize(key.substr(5).toLowerCase()) const value = $attrs[key] dataset[newKey] = force ? value : dataset[newKey] || value } } } if (vm) { let $child = vm while ($child && $child.$el === target) { updateDataset($child) $child = $child.$children[0] } let $parent = vm.$parent while ($parent && $parent.$el === target) { updateDataset($parent, true) $parent = $parent.$parent } } else { dataset = Object.assign({}, target.dataset, target.__uniDataset) } return normalizeDataset(dataset) } export function upx2px (str) { str = str + '' if (str.indexOf('upx') !== -1) { // upx转换 return uni.upx2px(parseInt(str) || 0) } return parseInt(str) || 0 } export function findExistsPageIndex (url) { const pages = getCurrentPages() let len = pages.length while (len--) { const page = pages[len] if (page.$page && page.$page.fullPath === url) { return len } } return -1 }