From 3a9f0109ce0d758c813cc42b65d58559e629e58e Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Tue, 18 Jan 2022 13:55:13 +0800 Subject: [PATCH] fix: map with tap event --- .../src/vue/transforms/index.ts | 8 ++++- .../src/vue/transforms/transformEvent.ts | 14 +++++++-- .../__tests__/builtInComponents.spec.ts | 21 -------------- .../uni-h5-vite/__tests__/compiler.spec.ts | 29 +++++++++++++++++++ 4 files changed, 47 insertions(+), 25 deletions(-) delete mode 100644 packages/uni-h5-vite/__tests__/builtInComponents.spec.ts create mode 100644 packages/uni-h5-vite/__tests__/compiler.spec.ts diff --git a/packages/uni-cli-shared/src/vue/transforms/index.ts b/packages/uni-cli-shared/src/vue/transforms/index.ts index f0c67102f..4ea525f99 100644 --- a/packages/uni-cli-shared/src/vue/transforms/index.ts +++ b/packages/uni-cli-shared/src/vue/transforms/index.ts @@ -33,7 +33,13 @@ export const transformMatchMedia = createTransformTag({ }) export const transformTapToClick = createTransformEvent({ - tap: 'click', + tap: (node) => { + // 地图组件有自己特定的 tap 事件 + if (node.tag === 'map' || node.tag === 'v-uni-map') { + return 'tap' + } + return 'click' + }, }) export const transformComponentLink = diff --git a/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts b/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts index c982b0c61..b6941bb76 100644 --- a/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts +++ b/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts @@ -1,8 +1,12 @@ -import { DirectiveNode, NodeTransform } from '@vue/compiler-core' +import { DirectiveNode, ElementNode, NodeTransform } from '@vue/compiler-core' +import { isFunction } from '@vue/shared' import { isElementNode, isSimpleExpressionNode } from '../../vite/utils/ast' export function createTransformEvent( - options: Record + options: Record< + string, + string | ((node: ElementNode, dir: DirectiveNode) => string) + > ): NodeTransform { return function transformEvent(node) { if (!isElementNode(node)) { @@ -14,7 +18,11 @@ export function createTransformEvent( const eventType = options[arg.content] if (eventType) { // e.g tap => click - arg.content = eventType + if (isFunction(eventType)) { + arg.content = eventType(node, prop as DirectiveNode) + } else { + arg.content = eventType + } } } }) diff --git a/packages/uni-h5-vite/__tests__/builtInComponents.spec.ts b/packages/uni-h5-vite/__tests__/builtInComponents.spec.ts deleted file mode 100644 index 4f7249a3e..000000000 --- a/packages/uni-h5-vite/__tests__/builtInComponents.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BindingTypes } from '@vue/compiler-core' -import { compileTemplate } from '@vue/compiler-sfc' -import { compilerOptions } from '../src/plugin/uni' -const filename = 'foo.vue' -describe('h5: compiler', () => { - test('builtInComponents', () => { - expect( - compileTemplate({ - source: ``, - filename, - id: filename, - compilerOptions: { - ...compilerOptions, - bindingMetadata: { - canvas: BindingTypes.SETUP_REF, - }, - }, - }).code - ).toContain(`_resolveComponent("v-uni-canvas")`) - }) -}) diff --git a/packages/uni-h5-vite/__tests__/compiler.spec.ts b/packages/uni-h5-vite/__tests__/compiler.spec.ts new file mode 100644 index 000000000..d531fcaf8 --- /dev/null +++ b/packages/uni-h5-vite/__tests__/compiler.spec.ts @@ -0,0 +1,29 @@ +import { BindingTypes } from '@vue/compiler-core' +import { compileTemplate } from '@vue/compiler-sfc' +import { compilerOptions } from '../src/plugin/uni' +const filename = 'foo.vue' + +function compile(source: string) { + return compileTemplate({ + source, + filename, + id: filename, + compilerOptions: { + ...compilerOptions, + bindingMetadata: { + canvas: BindingTypes.SETUP_REF, + }, + }, + }) +} +describe('h5: compiler', () => { + test('tap=>click', () => { + expect(compile('').code).toContain(`onClick`) + expect(compile('').code).toContain(`onTap`) + }) + test('builtInComponents', () => { + expect(compile('').code).toContain( + `_resolveComponent("v-uni-canvas")` + ) + }) +}) -- GitLab