diff --git a/packages/uni-app-plus/dist/index.js b/packages/uni-app-plus/dist/index.js index 82621c603b675a5e9b57b97e3dbbd0dec6aa401d..3787315533d76a35020aadec3a1d3db96f281689 100644 --- a/packages/uni-app-plus/dist/index.js +++ b/packages/uni-app-plus/dist/index.js @@ -270,10 +270,12 @@ const customize = cached((str) => { }); function initTriggerEvent (mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) - }; + if (wx.canIUse('nextTick')) { // 微信旧版本基础库不支持重写triggerEvent + const oldTriggerEvent = mpInstance.triggerEvent; + mpInstance.triggerEvent = function (event, ...args) { + return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) + }; + } } Page = function (options = {}) { @@ -412,11 +414,18 @@ function wrapper$1 (event) { event.preventDefault = noop; event.target = event.target || {}; - event.detail = event.detail || {}; + + if (!hasOwn(event, 'detail')) { + event.detail = {}; + } // TODO 又得兼容 mpvue 的 mp 对象 event.mp = event; - event.target = Object.assign({}, event.target, event.detail); + + if (isPlainObject(event.detail)) { + event.target = Object.assign({}, event.target, event.detail); + } + return event } @@ -489,15 +498,15 @@ function processEventExtra (vm, extra) { } function processEventArgs (vm, event, args = [], extra = [], isCustom, methodName) { + let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 if (isCustom) { // 自定义事件 - if ( - event.currentTarget && + isCustomMPEvent = event.currentTarget && event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx' - ) { // wxcomponent 原生组件,传递原始 event 对象 - return [event] - } - if (!args.length) { // 无参数,直接传入 detail 数组 + event.currentTarget.dataset.comType === 'wx'; + if (!args.length) { // 无参数,直接传入 event 或 detail 数组 + if (isCustomMPEvent) { + return [event] + } return event.detail } } @@ -510,7 +519,11 @@ function processEventArgs (vm, event, args = [], extra = [], isCustom, methodNam if (methodName === '__set_model' && !isCustom) { // input v-model value ret.push(event.target.value); } else { - ret.push(isCustom ? event.detail[0] : event); + if (isCustom && !isCustomMPEvent) { + ret.push(event.detail[0]); + } else { // wxcomponent 组件或内置组件 + ret.push(event); + } } } else { if (typeof arg === 'string' && hasOwn(extraObj, arg)) { diff --git a/packages/uni-app-plus/package.json b/packages/uni-app-plus/package.json index 7cfe670af02ba29208a7d46218f81fb6ee3f3c1c..1578bc8cbf040aca16ddc835af3036e7a4e99e15 100644 --- a/packages/uni-app-plus/package.json +++ b/packages/uni-app-plus/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-app-plus", - "version": "0.0.211", + "version": "0.0.212", "description": "uni-app app-plus", "main": "dist/index.js", "scripts": { diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js index da9b3d5cc02e3cf475ee04c868fe62f5df47bed7..d79d68705bedb3150291dcecd964b45544dbb819 100644 --- a/packages/uni-mp-weixin/dist/index.js +++ b/packages/uni-mp-weixin/dist/index.js @@ -297,10 +297,12 @@ const customize = cached((str) => { }); function initTriggerEvent (mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) - }; + if (wx.canIUse('nextTick')) { // 微信旧版本基础库不支持重写triggerEvent + const oldTriggerEvent = mpInstance.triggerEvent; + mpInstance.triggerEvent = function (event, ...args) { + return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) + }; + } } Page = function (options = {}) { @@ -439,11 +441,18 @@ function wrapper$1 (event) { event.preventDefault = noop; event.target = event.target || {}; - event.detail = event.detail || {}; + + if (!hasOwn(event, 'detail')) { + event.detail = {}; + } // TODO 又得兼容 mpvue 的 mp 对象 event.mp = event; - event.target = Object.assign({}, event.target, event.detail); + + if (isPlainObject(event.detail)) { + event.target = Object.assign({}, event.target, event.detail); + } + return event } @@ -516,15 +525,15 @@ function processEventExtra (vm, extra) { } function processEventArgs (vm, event, args = [], extra = [], isCustom, methodName) { + let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 if (isCustom) { // 自定义事件 - if ( - event.currentTarget && + isCustomMPEvent = event.currentTarget && event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx' - ) { // wxcomponent 原生组件,传递原始 event 对象 - return [event] - } - if (!args.length) { // 无参数,直接传入 detail 数组 + event.currentTarget.dataset.comType === 'wx'; + if (!args.length) { // 无参数,直接传入 event 或 detail 数组 + if (isCustomMPEvent) { + return [event] + } return event.detail } } @@ -537,7 +546,11 @@ function processEventArgs (vm, event, args = [], extra = [], isCustom, methodNam if (methodName === '__set_model' && !isCustom) { // input v-model value ret.push(event.target.value); } else { - ret.push(isCustom ? event.detail[0] : event); + if (isCustom && !isCustomMPEvent) { + ret.push(event.detail[0]); + } else { // wxcomponent 组件或内置组件 + ret.push(event); + } } } else { if (typeof arg === 'string' && hasOwn(extraObj, arg)) { diff --git a/packages/uni-mp-weixin/package.json b/packages/uni-mp-weixin/package.json index f4c196fe44c784b5237dc528aac0c02a0af83b2c..bb95b15dbcad12a9fe4754e609fa650d82ef95d7 100644 --- a/packages/uni-mp-weixin/package.json +++ b/packages/uni-mp-weixin/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-mp-weixin", - "version": "0.0.930", + "version": "0.0.931", "description": "uni-app mp-weixin", "main": "dist/index.js", "scripts": { diff --git a/src/core/runtime/wrapper/util.js b/src/core/runtime/wrapper/util.js index c966919e4ef0cb27799c2d76d9e0c830fb197a61..25ce4758479838940c1de0f02d7be640f7269d4e 100644 --- a/src/core/runtime/wrapper/util.js +++ b/src/core/runtime/wrapper/util.js @@ -114,17 +114,28 @@ function wrapper (event) { event.preventDefault = noop event.target = event.target || {} - event.detail = event.detail || {} + + if (!hasOwn(event, 'detail')) { + event.detail = {} + } if (__PLATFORM__ === 'mp-baidu') { // mp-baidu,checked=>value - if (hasOwn(event.detail, 'checked') && !hasOwn(event.detail, 'value')) { + if ( + isPlainObject(event.detail) && + hasOwn(event.detail, 'checked') && + !hasOwn(event.detail, 'value') + ) { event.detail.value = event.detail.checked } } // TODO 又得兼容 mpvue 的 mp 对象 event.mp = event - event.target = Object.assign({}, event.target, event.detail) + + if (isPlainObject(event.detail)) { + event.target = Object.assign({}, event.target, event.detail) + } + return event } @@ -197,15 +208,15 @@ function processEventExtra (vm, extra) { } function processEventArgs (vm, event, args = [], extra = [], isCustom, methodName) { + let isCustomMPEvent = false // wxcomponent 组件,传递原始 event 对象 if (isCustom) { // 自定义事件 - if ( - event.currentTarget && + isCustomMPEvent = event.currentTarget && event.currentTarget.dataset && event.currentTarget.dataset.comType === 'wx' - ) { // wxcomponent 原生组件,传递原始 event 对象 - return [event] - } - if (!args.length) { // 无参数,直接传入 detail 数组 + if (!args.length) { // 无参数,直接传入 event 或 detail 数组 + if (isCustomMPEvent) { + return [event] + } return event.detail } } @@ -218,7 +229,11 @@ function processEventArgs (vm, event, args = [], extra = [], isCustom, methodNam if (methodName === '__set_model' && !isCustom) { // input v-model value ret.push(event.target.value) } else { - ret.push(isCustom ? event.detail[0] : event) + if (isCustom && !isCustomMPEvent) { + ret.push(event.detail[0]) + } else { // wxcomponent 组件或内置组件 + ret.push(event) + } } } else { if (typeof arg === 'string' && hasOwn(extraObj, arg)) { diff --git a/src/platforms/mp-weixin/runtime/index.js b/src/platforms/mp-weixin/runtime/index.js index f722360df0f3fa97818d50280eebe4becd359979..00832b87323d71205efb87fca02922f9c1498d93 100644 --- a/src/platforms/mp-weixin/runtime/index.js +++ b/src/platforms/mp-weixin/runtime/index.js @@ -13,9 +13,11 @@ const customize = cached((str) => { }) function initTriggerEvent (mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) + if (wx.canIUse('nextTick')) { // 微信旧版本基础库不支持重写triggerEvent + const oldTriggerEvent = mpInstance.triggerEvent + mpInstance.triggerEvent = function (event, ...args) { + return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) + } } }