diff --git a/packages/uni-template-compiler/__tests__/compiler-app-plus.service.spec.js b/packages/uni-template-compiler/__tests__/compiler-app-plus.service.spec.js index 7d5fe816c86b89a91d4b3ef2103a6e079b8794af..7b95a1b98873d4c60df154502f2fe603aa32e223 100644 --- a/packages/uni-template-compiler/__tests__/compiler-app-plus.service.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-app-plus.service.spec.js @@ -193,6 +193,17 @@ describe('codegen', () => { `with(this){return _c('p',{slot:"one"})}` ) }) + + it('generate slot with v-for', () => { + assertCodegen( + '
', + `with(this){return _c('div',[_l((_$s(1,'f',{forItems:list})),function(item,$10,$20,$30){return _t("default",null,{"_i":("1-"+$30),"key":_$s(1,'f',{forIndex:$20,key:1+'-'+$30})})})],2)}` + ) + assertCodegen( + '
', + `with(this){return _c('div',[_l((_$s(1,'f',{forItems:list})),function(item,$10,$20,$30){return [_t("default",null,{"_i":("2-"+$30),"key":_$s(1,'f',{forIndex:$20,keyIndex:0,key:1+'-0'+$30})})]})],2)}` + ) + }) it('generate scoped slot', () => { assertCodegen( diff --git a/packages/uni-template-compiler/lib/app/service.js b/packages/uni-template-compiler/lib/app/service.js index 85a0d29b362ddb901a7d2bcbaa1102169152405e..72d36fb7309f55eadf4aa8721ec2af6dec3f0328 100644 --- a/packages/uni-template-compiler/lib/app/service.js +++ b/packages/uni-template-compiler/lib/app/service.js @@ -72,6 +72,9 @@ function parseKey (el, isScopedSlot) { const keyIndex = forEl.children.indexOf(el) el.key = genVar(V_FOR, `{forIndex:${it},keyIndex:${keyIndex},key:${el.key}}`) } + if (el.tag === 'slot') { + el.attrs.push({ name: 'key', value: el.key }) + } } function parseComponentAttrs (el, genVar) {