提交 91b92481 编写于 作者: Q qiang

fix: 优化 dataset 获取逻辑,完善非 string 类型支持

上级 2d6bcba5
import {
camelize
} from 'uni-shared'
const components = ['SystemAsyncLoading', 'SystemAsyncError']
export function isPage (vm) {
if (vm.$parent && vm.$parent.$options.name === 'PageBody') {
......@@ -35,6 +39,21 @@ export function normalizeDataset (dataset = {}) {
return result
}
export function getTargetDataset (target) {
let dataset = {}
if (target.__vue__) {
const $attrs = target.__vue__.$attrs
for (const key in $attrs) {
if (key.startsWith('data-')) {
dataset[camelize(key.substr(5))] = $attrs[key]
}
}
} else {
dataset = target.dataset || {}
}
return normalizeDataset(dataset)
}
export function upx2px (str) {
str = str + ''
if (str.indexOf('upx') !== -1) { // upx转换
......@@ -53,4 +72,4 @@ export function findExistsPageIndex (url) {
}
}
return -1
}
}
import {
normalizeDataset
getTargetDataset
} from 'uni-helpers/index'
import getWindowOffset from 'uni-platform/helpers/get-window-offset'
......@@ -46,7 +46,7 @@ function getNodeInfo (el, fields) {
info.id = el.id
}
if (fields.dataset) {
info.dataset = normalizeDataset(el.dataset || {})
info.dataset = getTargetDataset(el)
}
if (fields.rect || fields.size) {
const rect = el.getBoundingClientRect()
......
import 'intersection-observer'
import {
normalizeDataset
getTargetDataset
} from 'uni-helpers/index'
import {
......@@ -49,7 +49,7 @@ export function requestComponentObserver ({
boundingClientRect: getRect(entrie.boundingClientRect),
relativeRect: getRect(entrie.rootBounds),
time: Date.now(),
dataset: normalizeDataset(entrie.target.dataset || {}),
dataset: getTargetDataset(entrie.target),
id: entrie.target.id
}
})
......
......@@ -3,7 +3,7 @@ import {
} from 'uni-shared'
import {
normalizeDataset
getTargetDataset
} from 'uni-helpers/index'
import {
......@@ -17,7 +17,7 @@ function processTarget (target, detail, checkShadowRoot = false) {
id: target.id,
offsetLeft: target.offsetLeft,
offsetTop: target.offsetTop,
dataset: normalizeDataset(target.dataset)
dataset: getTargetDataset(target)
}
if (detail) {
Object.assign(res, detail)
......
......@@ -137,10 +137,6 @@ function parseExternalClasses (clazz, vm) {
return clazz
}
function isNotSafeString (value) {
return value === 'null' || value === 'true' || value === 'false' || !isNaN(Number(value)) || (value.startsWith('[') && value.endsWith(']')) || (value.startsWith('{') && value.endsWith('}'))
}
function setData (id, name, value) {
switch (name) {
case B_CLASS:
......@@ -160,12 +156,6 @@ function setData (id, name, value) {
case V_FOR:
return setForData.call(this, id, value)
}
// TODO 暂时先传递 dataset 至 view 层(理论上不需要)
if (name.indexOf('a-data-') === 0 && (typeof value !== 'string' || isNotSafeString(value))) {
try {
value = JSON.stringify(value)
} catch (e) {}
}
return ((this._$newData[id] || (this._$newData[id] = {}))[name] = value)
}
......
......@@ -31,32 +31,7 @@ import {
import parseComponentCreateOptions from './parse-component-create-options'
// TODO 临时通过序列化,反序列化传递dataset,后续可以全部保留在service,不做传递
function parseDataset (dataset) {
const ret = Object.create(null)
Object.keys(dataset).forEach(name => {
try {
ret[name] = JSON.parse(dataset[name])
} catch (e) { // dataset 存在两种,一种是被JSON.stringify的,一种是原始的
ret[name] = dataset[name]
}
})
return ret
}
function parseTargets (event) {
const targetDataset = event.target && event.target.dataset
if (targetDataset) {
event.target.dataset = parseDataset(targetDataset)
}
const currentTargetDataset = event.currentTarget && event.currentTarget.dataset
if (currentTargetDataset) {
event.currentTarget.dataset = parseDataset(currentTargetDataset)
}
}
function wrapperEvent (event) {
parseTargets(event)
event.preventDefault = noop
event.stopPropagation = noop
return wrapperMPEvent(event)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册