diff --git a/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.service.spec.js b/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.service.spec.js index daf612c7a7cfc708b61b2d58cac228fe1288f867..d5a2c42d8ab3ff536e03ab2325be3fa5d34490aa 100644 --- a/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.service.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.service.spec.js @@ -79,6 +79,14 @@ describe('codegen', () => { 'ABCD', `with(this){return _c('current-user',{attrs:{"_i":0}},[_v("")])}` ) + assertCodegen( + ` + + `, + `with(this){return _c('current-user',{attrs:{"_i":0},scopedSlots:_u([{key:"default",fn:function({result}, _svm, _si){return _l((_svm._$s(("2-"+_si),'f',{forItems:result.list})),function(item,index,$20,$30){return _c('view',{key:_svm._$s(("2-"+_si),'f',{forIndex:$20,key:("2-"+_si)+'-'+$30}),attrs:{"_i":(("2-"+_si)+$30)}},[_v((_svm._$s((("2-"+_si)+$30),'t0',_s(item.name))))])})}}])})}` + ) }) it('generate keep-alive', () => { diff --git a/packages/uni-template-compiler/__tests__/demo.js b/packages/uni-template-compiler/__tests__/demo.js index f0af7556e946cd04103329cb92528b2342688bb8..e1afb887416fcd5758b26486ec58e6fea22819a4 100644 --- a/packages/uni-template-compiler/__tests__/demo.js +++ b/packages/uni-template-compiler/__tests__/demo.js @@ -1,7 +1,11 @@ const compiler = require('../lib') const res = compiler.compile( ` - + + + `, { resourcePath: '/User/fxy/Documents/test.wxml', isReservedTag: function (tag) { @@ -14,7 +18,7 @@ const res = compiler.compile( platform: 'app-plus' }, filterModules: ['swipe'], - // service: true, + service: true, view: true }) diff --git a/packages/uni-template-compiler/lib/app/service.js b/packages/uni-template-compiler/lib/app/service.js index 21b1c6ea937ed5dceadd097bbb91dc8abeaf0c73..5aafc4362f282c30843504c5fb3aff21d4d58526 100644 --- a/packages/uni-template-compiler/lib/app/service.js +++ b/packages/uni-template-compiler/lib/app/service.js @@ -100,7 +100,7 @@ function transformNode (el, parent, state, isScopedSlot) { parseIs(el, genVar) parseFor(el, createGenVar, isScopedSlot) - parseKey(el) + parseKey(el, isScopedSlot) parseIf(el, createGenVar, isScopedSlot) parseBinding(el, genVar) diff --git a/packages/uni-template-compiler/lib/app/util.js b/packages/uni-template-compiler/lib/app/util.js index b682bf2225e66dd2f787af196e74479b90a12112..db1aee6dccfd07772b53715de8d1f241a71bd950 100644 --- a/packages/uni-template-compiler/lib/app/util.js +++ b/packages/uni-template-compiler/lib/app/util.js @@ -119,6 +119,9 @@ function updateScopedSlotEleId (el, state) { } const it = '_si' const newId = getNewId(el.attrsMap[ID], it) + if (el.forId) { + el.forId = getNewId(el.forId, it) + } addRawAttr(el, ID, newId) if (el.attrs) { const attr = el.attrs.find(attr => attr.name === ID)