diff --git a/src/core/view/plugins/index.js b/src/core/view/plugins/index.js index e05b5e31950ba1958f07e820ffdbb0fd7d503450..ee764f3fac502111133f19eba31fd0c8d5720171 100644 --- a/src/core/view/plugins/index.js +++ b/src/core/view/plugins/index.js @@ -48,15 +48,18 @@ export default { return $event } - Vue.prototype.$getComponentDescriptor = function (vm) { - return createComponentDescriptor(vm || this) + Vue.prototype.$getComponentDescriptor = function (vm, owner = false) { + return createComponentDescriptor(vm || this, owner) } Vue.prototype.$handleWxsEvent = function ($event) { if ($event instanceof Event) { // 未处理的 event 对象 需要对 target 校正及包装 const currentTarget = $event.currentTarget - const instance = currentTarget && currentTarget.__vue__ && currentTarget.__vue__.$getComponentDescriptor() - $event = processEvent.call(this, $event.type, $event, {}, findUniTarget($event, this.$el) || $event.target, $event.currentTarget) + const instance = currentTarget && + currentTarget.__vue__ && + currentTarget.__vue__.$getComponentDescriptor(null, true) + $event = processEvent.call(this, $event.type, $event, {}, findUniTarget($event, this.$el) || $event.target, + $event.currentTarget) $event.instance = instance } return $event diff --git a/src/core/view/plugins/wxs/component-descriptor.js b/src/core/view/plugins/wxs/component-descriptor.js index bcf259f74a59b8659052b193f31289e02f3433ae..118acda7068b16d6855b7659b5687d189b3cc880 100644 --- a/src/core/view/plugins/wxs/component-descriptor.js +++ b/src/core/view/plugins/wxs/component-descriptor.js @@ -108,7 +108,7 @@ class ComponentDescriptor { const clsIndex = addWxsClsArr.findIndex(oldCls => oldCls === cls) if (clsIndex !== -1) { // 在 addWxsClass 中 addWxsClsArr.splice(clsIndex, 1) - } + } removeWxsClsArr.push(cls) }) this.$el.__wxsRemoveClass = removeWxsClsArr @@ -146,11 +146,12 @@ class ComponentDescriptor { } } -export function createComponentDescriptor (vm) { +export function createComponentDescriptor (vm, owner = false) { if (vm && vm.$el) { - if (!vm.$el.__wxsComponentDescriptor) { - vm.$el.__wxsComponentDescriptor = new ComponentDescriptor(vm) + const key = owner ? '__wxsComponentDescriptorOwner' : '__wxsComponentDescriptor' + if (!vm.$el[key]) { + vm.$el[key] = new ComponentDescriptor(vm) } - return vm.$el.__wxsComponentDescriptor + return vm.$el[key] } }