瀏覽代碼

refactor: only inject rest args for member expression handlers + fix tests

Evan You 5 年之前
父節點
當前提交
605953a154
共有 2 個文件被更改,包括 9 次插入11 次删除
  1. 6 10
      packages/compiler-core/__tests__/transforms/vOn.spec.ts
  2. 3 1
      packages/compiler-core/src/transforms/vOn.ts

+ 6 - 10
packages/compiler-core/__tests__/transforms/vOn.spec.ts

@@ -142,7 +142,7 @@ describe('compiler: transform v-on', () => {
           key: { content: `onClick` },
           value: {
             type: NodeTypes.COMPOUND_EXPRESSION,
-            children: [`($event, ...args) => (`, { content: `i++` }, `)`]
+            children: [`$event => (`, { content: `i++` }, `)`]
           }
         }
       ]
@@ -160,18 +160,14 @@ describe('compiler: transform v-on', () => {
             // should wrap with `{` for multiple statements
             // in this case the return value is discarded and the behavior is
             // consistent with 2.x
-            children: [
-              `($event, ...args) => {`,
-              { content: `foo();bar()` },
-              `}`
-            ]
+            children: [`$event => {`, { content: `foo();bar()` }, `}`]
           }
         }
       ]
     })
   })
 
-  test('should handle multiple line statement', () => {
+  test('should handle multi-line statement', () => {
     const { node } = parseWithVOn(`<div @click="\nfoo();\nbar()\n"/>`)
     expect((node.codegenNode as VNodeCall).props).toMatchObject({
       properties: [
@@ -200,7 +196,7 @@ describe('compiler: transform v-on', () => {
           value: {
             type: NodeTypes.COMPOUND_EXPRESSION,
             children: [
-              `($event, ...args) => (`,
+              `$event => (`,
               {
                 type: NodeTypes.COMPOUND_EXPRESSION,
                 children: [
@@ -230,7 +226,7 @@ describe('compiler: transform v-on', () => {
           value: {
             type: NodeTypes.COMPOUND_EXPRESSION,
             children: [
-              `($event, ...args) => {`,
+              `$event => {`,
               {
                 children: [
                   { content: `_ctx.foo` },
@@ -452,7 +448,7 @@ describe('compiler: transform v-on', () => {
         value: {
           type: NodeTypes.COMPOUND_EXPRESSION,
           children: [
-            `($event, ...args) => (`,
+            `$event => (`,
             { children: [{ content: `_ctx.foo` }, `++`] },
             `)`
           ]

+ 3 - 1
packages/compiler-core/src/transforms/vOn.ts

@@ -102,7 +102,9 @@ export const transformOn: DirectiveTransform = (
     if (isInlineStatement || (isCacheable && isMemberExp)) {
       // wrap inline statement in a function expression
       exp = createCompoundExpression([
-        `($event, ...args) => ${hasMultipleStatements ? `{` : `(`}`,
+        `${isInlineStatement ? `$event` : `($event, ...args)`} => ${
+          hasMultipleStatements ? `{` : `(`
+        }`,
         exp,
         hasMultipleStatements ? `}` : `)`
       ])