diff --git a/dist/megalo.mp.esm.js b/dist/megalo.mp.esm.js index d51d9bdcc..c6a67fd1c 100644 --- a/dist/megalo.mp.esm.js +++ b/dist/megalo.mp.esm.js @@ -5129,7 +5129,7 @@ try { } function updateMPData (type, data, vnode) { - var obj; + var obj, obj$1; if ( type === void 0 ) type = HOLDER_TYPE_VARS.text; var vm = this; @@ -5148,12 +5148,22 @@ try { var curValue = getValue(vm.$mp.page.data, dataPaths); + // fix: 在设置 a.1 时,头条小程序会把 a 变成数组,导致后续的 a.b 设置失败 + // 通过强制加一个字符串 key,将 holderVar 变成对象 + if (vm.$mp.platform === 'toutiao') { + var convertObjectPaths = [ROOT_DATA_VAR, vmId, holderVar, '_obj']; + var convertObjectPathStr = convertObjectPaths.join('.'); + if (!getValue(vm.$mp.page.data, convertObjectPaths)) { + vm.$mp._update(( obj = {}, obj[convertObjectPathStr] = true, obj )); + } + } + /* istanbul ignore else */ if (isDef(hid)) { var isDeepEqual = deepEqual(curValue, data); /* istanbul ignore else */ if (!isDeepEqual || vm.$mp._shouldUpdateBuffer(dataPathStr, data)) { - vm.$mp._update(( obj = {}, obj[dataPathStr] = data, obj )); + vm.$mp._update(( obj$1 = {}, obj$1[dataPathStr] = data, obj$1 )); } } } @@ -7531,7 +7541,7 @@ try { /* */ - Vue.megaloVersion = '0.10.3-1'; + Vue.megaloVersion = '0.10.3'; return Vue; diff --git a/package.json b/package.json index ad4cad8a8..818030c9f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "megalo", - "version": "0.10.3-1", + "version": "0.10.3", "description": "Reactive, component-oriented view layer for modern web interfaces.", "main": "dist/megalo.mp.esm.js", "module": "dist/megalo.mp.esm.js", diff --git a/packages/megalo-template-compiler/build.js b/packages/megalo-template-compiler/build.js index 65bbadeeb..82ac8180d 100644 --- a/packages/megalo-template-compiler/build.js +++ b/packages/megalo-template-compiler/build.js @@ -5024,7 +5024,7 @@ var eventTypeMap$2 = { CalloutTap: ['callouttap'], ControlTap: ['controltap'], RegionChange: ['regionchange'], - Message: ['message'], + Messag: ['message'], PlusClick: ['plusclick'], TabClick: ['tabclick'], CardClick: ['cardclick'], diff --git a/packages/megalo-template-compiler/package.json b/packages/megalo-template-compiler/package.json index 250fe3f1c..4c6f185f4 100644 --- a/packages/megalo-template-compiler/package.json +++ b/packages/megalo-template-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@megalo/template-compiler", - "version": "0.10.3-1", + "version": "0.10.3", "description": "megalo template compiler for Vue", "main": "index.js", "repository": { diff --git a/src/platforms/mp/runtime/instance/update.js b/src/platforms/mp/runtime/instance/update.js index 5b3f0b1a5..fd473a063 100644 --- a/src/platforms/mp/runtime/instance/update.js +++ b/src/platforms/mp/runtime/instance/update.js @@ -61,6 +61,18 @@ export function updateMPData (type = HOLDER_TYPE_VARS.text, data, vnode) { const curValue = getValue(vm.$mp.page.data, dataPaths) + // fix: 在设置 a.1 时,头条小程序会把 a 变成数组,导致后续的 a.b 设置失败 + // 通过强制加一个字符串 key,将 holderVar 变成对象 + if (vm.$mp.platform === 'toutiao') { + const convertObjectPaths = [ROOT_DATA_VAR, vmId, holderVar, '_obj'] + const convertObjectPathStr = convertObjectPaths.join('.') + if (!getValue(vm.$mp.page.data, convertObjectPaths)) { + vm.$mp._update({ + [convertObjectPathStr]: true + }) + } + } + /* istanbul ignore else */ if (isDef(hid)) { const isDeepEqual = deepEqual(curValue, data) diff --git a/test/mp/helpers/index.js b/test/mp/helpers/index.js index e18c5c691..282629582 100644 --- a/test/mp/helpers/index.js +++ b/test/mp/helpers/index.js @@ -12,7 +12,8 @@ initMPEnvironment() const platformAPI = { wechat: 'wx', alipay: 'my', - swan: 'swan' + swan: 'swan', + toutiao: 'tt' } export function setMPPlatform (platform) { if (platformAPI[platform]) { diff --git a/test/mp/runtime/platform/toutiao.spec.js b/test/mp/runtime/platform/toutiao.spec.js new file mode 100644 index 000000000..b04dacbd9 --- /dev/null +++ b/test/mp/runtime/platform/toutiao.spec.js @@ -0,0 +1,46 @@ +import { + resetVue, + createPage, + setMPPlatform, + resetMPPlatform +} from '../../helpers' + +describe('toutiao', () => { + it('should get platform from $mp', () => { + resetVue() + setMPPlatform('toutiao') + + const pageOptions = { + template: `
`, + mpType: 'page' + } + + const { vm } = createPage(pageOptions) + + expect(vm.$mp.platform).toBe('toutiao') + + resetMPPlatform() + }) + + it('should set obj convery flag in toutiao', () => { + resetVue() + setMPPlatform('toutiao') + + const pageOptions = { + template: `
+
{{item}}
+
`, + mpType: 'page', + data: { + list: [1, 2, 3] + } + } + + const { vm } = createPage(pageOptions) + + expect(vm.$mp.platform).toBe('toutiao') + expect(vm.$mp.page.data.$root[0].h._obj).toBeTruthy(); + + resetMPPlatform() + }) +}) diff --git a/test/mp/runtime/platform/wechat.spec.js b/test/mp/runtime/platform/wechat.spec.js index 878baabf3..47ee5ced2 100644 --- a/test/mp/runtime/platform/wechat.spec.js +++ b/test/mp/runtime/platform/wechat.spec.js @@ -21,4 +21,26 @@ describe('wechat', () => { resetMPPlatform() }) + + it('should not set obj convery flag in wechat', () => { + resetVue() + setMPPlatform('wechat') + + const pageOptions = { + template: `
+
{{item}}
+
`, + mpType: 'page', + data: { + list: [1, 2, 3] + } + } + + const { vm } = createPage(pageOptions) + + expect(vm.$mp.platform).toBe('wechat') + expect(vm.$mp.page.data.$root[0].h._obj).toBeUndefined(); + + resetMPPlatform() + }) })