From 95177e1dae9378a3d40281e089e49871dbdafc4e Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Sat, 19 Oct 2019 20:05:00 +0800 Subject: [PATCH] feat(v3): improve diff data --- packages/uni-app-plus/dist/index.v3.js | 15 +++++++++++---- .../service/framework/plugins/diff.js | 19 +++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/packages/uni-app-plus/dist/index.v3.js b/packages/uni-app-plus/dist/index.v3.js index c9e22b880..415ac4f38 100644 --- a/packages/uni-app-plus/dist/index.v3.js +++ b/packages/uni-app-plus/dist/index.v3.js @@ -9102,15 +9102,21 @@ var serviceContext = (function () { data[k] = v; } - function diffObject (id, newObj, oldObj, result) { - let key, cur, old; + function diffObject (newObj, oldObj) { + let result, key, cur, old; for (key in newObj) { cur = newObj[key]; old = oldObj[key]; if (old !== cur) { - setResult(result[id] || (result[id] = {}), key, cur); + if (key === 's' && isPlainObject(cur) && isPlainObject(old)) { + const style = diffObject(cur, old); + style && setResult(result || (result = Object.create(null)), 's', style); + } else { + setResult(result || (result = Object.create(null)), key, cur); + } } } + return result } function diff (newData, oldData, result) { @@ -9122,7 +9128,8 @@ var serviceContext = (function () { setResult(result, id, cur); continue } - diffObject(id, cur, old, result); + const idObj = diffObject(cur, old); + idObj && setResult(result, id, idObj); } return result } diff --git a/src/platforms/app-plus/service/framework/plugins/diff.js b/src/platforms/app-plus/service/framework/plugins/diff.js index cf831537a..9e02fcf8c 100644 --- a/src/platforms/app-plus/service/framework/plugins/diff.js +++ b/src/platforms/app-plus/service/framework/plugins/diff.js @@ -1,16 +1,26 @@ +import { + isPlainObject +} from 'uni-shared' + function setResult (data, k, v) { data[k] = v } -function diffObject (id, newObj, oldObj, result) { - let key, cur, old +function diffObject (newObj, oldObj) { + let result, key, cur, old for (key in newObj) { cur = newObj[key] old = oldObj[key] if (old !== cur) { - setResult(result[id] || (result[id] = {}), key, cur) + if (key === 's' && isPlainObject(cur) && isPlainObject(old)) { + const style = diffObject(cur, old) + style && setResult(result || (result = Object.create(null)), 's', style) + } else { + setResult(result || (result = Object.create(null)), key, cur) + } } } + return result } export function diff (newData, oldData, result) { @@ -22,7 +32,8 @@ export function diff (newData, oldData, result) { setResult(result, id, cur) continue } - diffObject(id, cur, old, result) + const idObj = diffObject(cur, old) + idObj && setResult(result, id, idObj) } return result } -- GitLab