From 0c92985c33deaed9e10e6bb154c93d4d173e4389 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Wed, 27 Nov 2019 19:17:51 +0800 Subject: [PATCH] fix(v3): v-for in scoped slots --- .../__tests__/compiler-app-plus-extra.service.spec.js | 8 ++++++++ packages/uni-template-compiler/__tests__/demo.js | 8 ++++++-- packages/uni-template-compiler/lib/app/service.js | 2 +- packages/uni-template-compiler/lib/app/util.js | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) 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 daf612c7a..d5a2c42d8 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 f0af7556e..e1afb8874 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 21b1c6ea9..5aafc4362 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 b682bf222..db1aee6dc 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) -- GitLab