未验证 提交 6c5d78ee 编写于 作者: D Dewyzee 提交者: GitHub

Merge pull request #1687 from Meituan-Dianping/xt/dev

app lifecycle bug fixed
......@@ -63,7 +63,7 @@ function deepDiff (oldData, newData, data, key) {
return
}
if (oldData[itemKey] !== newData[itemKey]) {
data[key + '.' + itemKey] = newData[itemKey] || ''
data[key + '.' + itemKey] = newData[itemKey]
}
})
return
......
......@@ -216,7 +216,7 @@ export function createMP ({ mpType, init }) {
this.rootVueVM = init()
this.rootVueVM.$mp = {}
}
const mp = this.rootVueVM
const mp = this.rootVueVM.$mp
mp.mpType = 'app'
mp.app = this
mp.status = 'launch'
......
......@@ -32,7 +32,7 @@ function getVmData (vm) {
Object.keys(vm._computedWatchers || {})
)
return dataKeys.reduce((res, key) => {
res[key] = vm[key]
res[key] = cloneDeep(vm[key])
return res
}, {})
}
......@@ -120,7 +120,7 @@ const throttleSetData = throttle((handle, data) => {
if (!Object.keys(data).length) {
return
}
handle(cloneDeep(data))
handle(data)
}, 50)
function getPage (vm) {
......@@ -142,7 +142,7 @@ export function updateDataToMP () {
return
}
const data = formatVmData(this)
const data = {}
diffData(this, data)
throttleSetData(page.setData.bind(page), data)
}
......
......@@ -63,9 +63,9 @@ export const eventTypeMap = {
scroll: ['scroll']
}
// vm上的数据深拷贝
// vm上的数据深拷贝,小程序里不支持eval函数,暂不支持函数拷贝
function isObject (obj) {
return (typeof obj === 'object' || typeof obj === 'function') && obj !== null
return (typeof obj === 'object') && obj !== null
}
export function cloneDeep (data, hash = new WeakMap()) {
......@@ -89,6 +89,16 @@ export function cloneDeep (data, hash = new WeakMap()) {
return hash.get(data)
}
copyData = new Constructor()
if (Constructor === Map) {
data.forEach((value, key) => {
copyData.set(key, isObject(value) ? cloneDeep(value) : value)
})
}
if (Constructor === Set) {
data.forEach(value => {
copyData.add(isObject(value) ? cloneDeep(value) : value)
})
}
hash.set(data, copyData)
}
const symbols = Object.getOwnPropertySymbols(data)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册