Browse Source
fix(compiler-core): should treat attribute key as expression (#4658)
pull/4688/head
Herrington Darkholme
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
26 additions and
1 deletions
-
packages/compiler-core/__tests__/transforms/vFor.spec.ts
-
packages/compiler-core/src/transforms/vFor.ts
|
|
@ -638,6 +638,26 @@ describe('compiler: v-for', () => { |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
test('template v-for key no prefixing on attribute key', () => { |
|
|
|
const { |
|
|
|
node: { codegenNode } |
|
|
|
} = parseWithForTransform( |
|
|
|
'<template v-for="item in items" key="key">test</template>', |
|
|
|
{ prefixIdentifiers: true } |
|
|
|
) |
|
|
|
const innerBlock = codegenNode.children.arguments[1].returns |
|
|
|
expect(innerBlock).toMatchObject({ |
|
|
|
type: NodeTypes.VNODE_CALL, |
|
|
|
tag: FRAGMENT, |
|
|
|
props: createObjectMatcher({ |
|
|
|
key: { |
|
|
|
type: NodeTypes.SIMPLE_EXPRESSION, |
|
|
|
content: 'key' |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
describe('codegen', () => { |
|
|
|
|
|
@ -68,7 +68,12 @@ export const transformFor = createStructuralDirectiveTransform( |
|
|
|
: keyProp.exp!) |
|
|
|
const keyProperty = keyProp ? createObjectProperty(`key`, keyExp!) : null |
|
|
|
|
|
|
|
if (!__BROWSER__ && context.prefixIdentifiers && keyProperty) { |
|
|
|
if ( |
|
|
|
!__BROWSER__ && |
|
|
|
context.prefixIdentifiers && |
|
|
|
keyProperty && |
|
|
|
keyProp!.type !== NodeTypes.ATTRIBUTE |
|
|
|
) { |
|
|
|
// #2085 process :key expression needs to be processed in order for it
|
|
|
|
// to behave consistently for <template v-for> and <div v-for>.
|
|
|
|
// In the case of `<template v-for>`, the node is discarded and never
|
|
|
|