From 5e0e8f1a93611a2696757e5ebe38a186bb691f27 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Thu, 23 Jun 2022 13:27:25 +0800 Subject: [PATCH] fix(map): trigger tap instead of click --- .../lib/app/parser/event-parser.js | 17 +++++++++++------ .../lib/h5/compiler-options.js | 19 ++++++++++++------- .../app-plus/view/components/map/index.vue | 3 ++- .../h5/view/components/map/index.vue | 5 +++-- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/packages/uni-template-compiler/lib/app/parser/event-parser.js b/packages/uni-template-compiler/lib/app/parser/event-parser.js index 4a41e044c..025c645d5 100644 --- a/packages/uni-template-compiler/lib/app/parser/event-parser.js +++ b/packages/uni-template-compiler/lib/app/parser/event-parser.js @@ -9,21 +9,26 @@ module.exports = function parseEvent (el) { const { events: eventsMap } = deprecated - normalizeEvent(el.events, eventsMap) - normalizeEvent(el.nativeEvents, eventsMap) + normalizeEvent(el, el.events, eventsMap) + normalizeEvent(el, el.nativeEvents, eventsMap) } } -function normalizeEvent (events, eventsMap) { +function normalizeEvent (el, events, eventsMap) { if (!events) { return } + const isMap = el.tag === 'map' || el.tag === 'v-uni-map' Object.keys(events).forEach(name => { // 过时事件类型转换 if (eventsMap[name]) { - events[eventsMap[name]] = events[name] - delete events[name] - // warnLogs.add(`警告:事件${name}已过时,推荐使用${eventsMap[name]}代替`) + if (isMap && name === 'tap') { + // 地图组件有自己特定的 tap 事件,不做转换 + } else { + events[eventsMap[name]] = events[name] + delete events[name] + // warnLogs.add(`警告:事件${name}已过时,推荐使用${eventsMap[name]}代替`) + } } }) } diff --git a/packages/vue-cli-plugin-uni/lib/h5/compiler-options.js b/packages/vue-cli-plugin-uni/lib/h5/compiler-options.js index a17e12321..0751c8545 100644 --- a/packages/vue-cli-plugin-uni/lib/h5/compiler-options.js +++ b/packages/vue-cli-plugin-uni/lib/h5/compiler-options.js @@ -87,24 +87,29 @@ module.exports = { events: eventsMap } = deprecated // const warnLogs = new Set() - normalizeEvent(el.events, eventsMap, filterModules) - normalizeEvent(el.nativeEvents, eventsMap, filterModules) + normalizeEvent(el, el.events, eventsMap, filterModules) + normalizeEvent(el, el.nativeEvents, eventsMap, filterModules) } } }] } -function normalizeEvent (events, eventsMap, filterModules) { +function normalizeEvent (el, events, eventsMap, filterModules) { if (!events) { return } + const isMap = el.tag === 'map' || el.tag === 'v-uni-map' Object.keys(events).forEach(name => { // 过时事件类型转换 if (eventsMap[name]) { - events[eventsMap[name]] = events[name] - delete events[name] - // warnLogs.add(`警告:事件${name}已过时,推荐使用${eventsMap[name]}代替`) - name = eventsMap[name] + if (isMap && name === 'tap') { + // 地图组件有自己特定的 tap 事件,不做转换 + } else { + events[eventsMap[name]] = events[name] + delete events[name] + // warnLogs.add(`警告:事件${name}已过时,推荐使用${eventsMap[name]}代替`) + name = eventsMap[name] + } } const handlers = events[name] diff --git a/src/platforms/app-plus/view/components/map/index.vue b/src/platforms/app-plus/view/components/map/index.vue index 5985544ba..7f85fdd96 100644 --- a/src/platforms/app-plus/view/components/map/index.vue +++ b/src/platforms/app-plus/view/components/map/index.vue @@ -221,7 +221,8 @@ export default { deep: true }) map.onclick = (e) => { - this.$trigger('click', {}, e) + // 编译器会保留 map 上的 tap 事件 + this.$trigger('tap', {}, e) } map.onstatuschanged = (e) => { this.$trigger('regionchange', {}, {}) diff --git a/src/platforms/h5/view/components/map/index.vue b/src/platforms/h5/view/components/map/index.vue index aa34ffebe..b7908fb88 100644 --- a/src/platforms/h5/view/components/map/index.vue +++ b/src/platforms/h5/view/components/map/index.vue @@ -375,8 +375,9 @@ export default { this.$emit('boundsready') }) maps.event.addListener(map, 'click', () => { - // TODO 编译器将 tap 转换为click - this.$trigger('click', {}, {}) + // 编译器会保留 map 上的 tap 事件 + this.$trigger('tap', {}, {}) + // this.$trigger('click', {}, {}) }) maps.event.addListener(map, 'dragstart', () => { this.$trigger('regionchange', {}, { -- GitLab