diff --git a/packages/compiler-core/__tests__/transforms/vFor.spec.ts b/packages/compiler-core/__tests__/transforms/vFor.spec.ts
index 1c7646e5e28..46bcac4e114 100644
--- a/packages/compiler-core/__tests__/transforms/vFor.spec.ts
+++ b/packages/compiler-core/__tests__/transforms/vFor.spec.ts
@@ -202,6 +202,30 @@ describe('compiler: v-for', () => {
expect(forNode.valueAlias).toBeUndefined()
expect((forNode.source as SimpleExpressionNode).content).toBe('items')
})
+
+ test('is template property', () => {
+ const { node: spanForNode } = parseWithForTransform(
+ ''
+ )
+ const { node: templateForNode } = parseWithForTransform(
+ ''
+ )
+ expect(spanForNode.isTemplateFor).toBe(false)
+ expect(templateForNode.isTemplateFor).toBe(true)
+ })
+
+ test('key props in template', () => {
+ const { node: spanForNode } = parseWithForTransform(
+ ''
+ )
+ const { node: templateForNode } = parseWithForTransform(
+ ''
+ )
+
+ expect(spanForNode.templateProps).toBeUndefined()
+ expect(templateForNode.templateProps).toHaveLength(1)
+ expect(templateForNode.templateProps![0].type).toBe(NodeTypes.DIRECTIVE)
+ })
})
describe('errors', () => {
diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts
index 515083c336a..fb90e8c2d22 100644
--- a/packages/compiler-core/src/ast.ts
+++ b/packages/compiler-core/src/ast.ts
@@ -274,6 +274,8 @@ export interface ForNode extends Node {
parseResult: ForParseResult
children: TemplateChildNode[]
codegenNode?: ForCodegenNode
+ isTemplateFor?: boolean
+ templateProps?: Array
}
export interface TextCallNode extends Node {
diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts
index a44532c0d58..b5c708dddab 100644
--- a/packages/compiler-core/src/transforms/vFor.ts
+++ b/packages/compiler-core/src/transforms/vFor.ts
@@ -271,6 +271,7 @@ export function processFor(
const { addIdentifiers, removeIdentifiers, scopes } = context
const { source, value, key, index } = parseResult
+ const isTemplate = isTemplateNode(node)
const forNode: ForNode = {
type: NodeTypes.FOR,
@@ -280,7 +281,9 @@ export function processFor(
keyAlias: key,
objectIndexAlias: index,
parseResult,
- children: isTemplateNode(node) ? node.children : [node]
+ children: isTemplate ? node.children : [node],
+ isTemplateFor: isTemplate,
+ templateProps: isTemplate ? node.props : undefined
}
context.replaceNode(forNode)