From c4e0a230828ef103be63d34045549761124fc485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=80=9A=E7=AA=97=E5=90=AC=E9=9B=A8=E4=B8=BF=E9=86=89?= =?UTF-8?q?=E6=97=A0=E5=BF=83?= <37876877+Zhang-Wei-666@users.noreply.github.com> Date: Tue, 26 Mar 2019 15:25:38 +0800 Subject: [PATCH 1/2] Fix( unit ) using the. exact modifier incorrectly when all system modifiers were used --- src/compiler/codegen/events.js | 17 +++++++++++------ test/unit/features/directives/on.spec.js | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index 44657e38cd8..6bca5bfe2b6 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -130,12 +130,17 @@ function genHandler (handler: ASTElementHandler | Array): str } } else if (key === 'exact') { const modifiers: ASTModifiers = (handler.modifiers: any) - genModifierCode += genGuard( - ['ctrl', 'shift', 'alt', 'meta'] - .filter(keyModifier => !modifiers[keyModifier]) - .map(keyModifier => `$event.${keyModifier}Key`) - .join('||') - ) + const modifiersKey = ['ctrl', 'shift', 'alt', 'meta'].filter(keyModifier => { + return !modifiers[keyModifier]; + }); + + if( modifiersKey.length ){ + genModifierCode += genGuard( + modifiersKey + .map(keyModifier => `$event.${keyModifier}Key`) + .join('||') + ) + } } else { keys.push(key) } diff --git a/test/unit/features/directives/on.spec.js b/test/unit/features/directives/on.spec.js index a97ddaa8947..153705d2db7 100644 --- a/test/unit/features/directives/on.spec.js +++ b/test/unit/features/directives/on.spec.js @@ -307,6 +307,29 @@ describe('Directive v-on', () => { expect(spy.calls.count()).toBe(1) }) + it('should support exact modifier when use all modifers', () => { + vm = new Vue({ + el, + template: ` +
+ +
+ `, + methods: { foo: spy } + }) + + triggerEvent(vm.$refs.ctrl, 'keyup') + expect(spy.calls.count()).toBe(0) + + triggerEvent(vm.$refs.ctrl, 'keyup', e => { + e.ctrlKey = true + e.altKey = true + e.shiftKey = true + e.metaKey = true + }) + expect(spy.calls.count()).toBe(1) + }) + it('should support number keyCode', () => { vm = new Vue({ el, From 18b7dfe74bd5eebf392e93216f369c5a5c975118 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Tue, 26 Mar 2019 11:12:09 +0100 Subject: [PATCH 2/2] chore(lint): update to match code style --- src/compiler/codegen/events.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index 6bca5bfe2b6..5f51865dac4 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -130,11 +130,11 @@ function genHandler (handler: ASTElementHandler | Array): str } } else if (key === 'exact') { const modifiers: ASTModifiers = (handler.modifiers: any) - const modifiersKey = ['ctrl', 'shift', 'alt', 'meta'].filter(keyModifier => { - return !modifiers[keyModifier]; - }); + const modifiersKey = ['ctrl', 'shift', 'alt', 'meta'].filter( + keyModifier => !modifiers[keyModifier] + ) - if( modifiersKey.length ){ + if (modifiersKey.length) { genModifierCode += genGuard( modifiersKey .map(keyModifier => `$event.${keyModifier}Key`)