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 42642d27d6178749bc1591102cb57d83e8721a8f..fdb4b55fda9fb64cc24921a220f31dc924456a53 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
@@ -146,6 +146,12 @@ describe('codegen', () => {
'123d',
`with(this){return (_$s(0,'i',a))?_c('text'):(_$s(1,'e',b))?_c('text'):(_$s(2,'e',c))?_c('text'):_c('text')}`
)
- })
+ })
+ it('generate dynamic slot', () => {
+ assertCodegen(
+ '',
+ `with(this){return _c('base-layout',{attrs:{"_i":0},scopedSlots:_u([{key:_$s(1,'st',dynamicSlotName),fn:function(_empty_, _svm, _si){return undefined}}],null,true)})}`
+ )
+ })
})
/* eslint-enable quotes */
diff --git a/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.view.spec.js b/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.view.spec.js
index 487a15611bbb89c55cd083e0b9f9a488b5a0ae25..088017627b3d168e5f341d862b8e416b2fc58c68 100644
--- a/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.view.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-app-plus-extra.view.spec.js
@@ -87,6 +87,12 @@ describe('codegen', () => {
'123d',
`with(this){return (_$g(0,'i'))?_c('v-uni-text',{attrs:{"_i":0}},[_v("1")]):(_$g(1,'e'))?_c('v-uni-text',{attrs:{"_i":1}},[_v("2")]):(_$g(2,'e'))?_c('v-uni-text',{attrs:{"_i":2}},[_v("3")]):_c('v-uni-text',{attrs:{"_i":3}},[_v("d")])}`
)
+ })
+ it('generate dynamic slot', () => {
+ assertCodegen(
+ '',
+ `with(this){return _c('base-layout',{attrs:{"_i":0},scopedSlots:_u([{key:_$g(1,'st'),fn:function(_empty_, _svm, _si){return undefined}}],null,true)})}`
+ )
})
})
/* eslint-enable quotes */
diff --git a/packages/uni-template-compiler/__tests__/demo.js b/packages/uni-template-compiler/__tests__/demo.js
index 2ee1fc227a07e80fc290f112fcfbdfdb96bca4a8..a98c54828c27e51bd75fd0139d70d2c25d9f2edd 100644
--- a/packages/uni-template-compiler/__tests__/demo.js
+++ b/packages/uni-template-compiler/__tests__/demo.js
@@ -19,7 +19,7 @@ const scopedPath = path.resolve(__dirname, '../../')
const compiler = require('../lib')
const res = compiler.compile(
`
-{{obj.param1}}123123{{obj.param1}}123123{{obj.param1}} -{{obj.param3}}---{{obj.param3}} {{obj.param2}}aaaa{{obj.param2}}aaaa{{obj.param2}}
+
`, {
miniprogram: true,
resourcePath: '/User/fxy/Documents/test.wxml',
diff --git a/packages/uni-template-compiler/lib/app/service.js b/packages/uni-template-compiler/lib/app/service.js
index 0eb71e660ca457d6ebee71bcc152f1cb8ddf90f6..56fb541252377dc9d29d7342d6eab33c60e0d3d3 100644
--- a/packages/uni-template-compiler/lib/app/service.js
+++ b/packages/uni-template-compiler/lib/app/service.js
@@ -162,9 +162,10 @@ function postTransformNode (el, options) {
} else {
options.root = el
}
- traverseNode(el, false, {
+ traverseNode(el, false, {
+ createGenVar,
forIteratorId: 0,
- transformNode,
+ transformNode,
filterModules: options.filterModules
})
optimize(el, options)
diff --git a/packages/uni-template-compiler/lib/app/util.js b/packages/uni-template-compiler/lib/app/util.js
index 72424eb38bbe0e31bb9116fe0f10c0a18e2ff298..e86b4168d55a5be61e2839ce398b9f3d985450f6 100644
--- a/packages/uni-template-compiler/lib/app/util.js
+++ b/packages/uni-template-compiler/lib/app/util.js
@@ -207,6 +207,9 @@ function traverseNode (el, parent, state, isScopedSlot) {
el.scopedSlots && Object.values(el.scopedSlots).forEach((slot, index) => {
state.childIndex = index
slot.slotScope = `${slot.slotScope}, _svm, _si`
+ if (slot.slotTargetDynamic && slot.slotTarget) {
+ slot.slotTarget = state.createGenVar(slot.attrsMap[ID])('st', slot.slotTarget)
+ }
traverseNode(slot, el, state, true)
})
}
diff --git a/packages/uni-template-compiler/lib/app/view.js b/packages/uni-template-compiler/lib/app/view.js
index 01ff75c84025a9d41fbc03126619123d31a74435..12119f09ddbd43dbc87b9913e0149b6f38f966a8 100644
--- a/packages/uni-template-compiler/lib/app/view.js
+++ b/packages/uni-template-compiler/lib/app/view.js
@@ -114,7 +114,7 @@ function transformNode (el, parent, state, isScopedSlot) {
if (isScopedSlot && String(pid).indexOf('_si') === -1) {
pid = getNewId(pid, '_si')
}
- return parseText(el, parent, {
+ return parseText(el, parent, {
childIndex: state.childIndex || 0,
index: 0,
view: true,
@@ -161,7 +161,8 @@ function postTransformNode (el, options) {
} else {
options.root = el
}
- traverseNode(el, false, {
+ traverseNode(el, false, {
+ createGenVar,
forIteratorId: 0,
transformNode,
filterModules: options.filterModules
@@ -241,4 +242,4 @@ module.exports = {
},
postTransformNode,
genData
-}
+}