diff --git a/packages/uni-mp-weixin/lib/uni.compiler.js b/packages/uni-mp-weixin/lib/uni.compiler.js index 4a3c0ac4d32bfe1bd106d7ee1a2db0beaeb06c52..11d9e52cfb5eb5ad36e012e4fad3dd3536890046 100644 --- a/packages/uni-mp-weixin/lib/uni.compiler.js +++ b/packages/uni-mp-weixin/lib/uni.compiler.js @@ -32,11 +32,21 @@ module.exports = { state.componentGenerics[componentName] = true - return { - type: componentName, - attr: props || {}, - children: [] - } + // 返回多个节点,支持作用域插槽当作普通插槽使用 + return [ + { + type: 'slot', + attr: { + name: slotName + }, + children: [] + }, + { + type: componentName, + attr: props || {}, + children: [] + } + ] }, resolveScopedSlots (slotName, { genCode, diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js index 05763b60454f5bd075a4077e3eb3f82d4ae262a2..aa55c06ec3eb4cefec464ca1303369dff7bca047 100644 --- a/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js @@ -72,16 +72,23 @@ describe('mp:compiler-mp-weixin', () => { }) it('generate scoped slot', () => { + assertCodegen( + '', + '', + function (res) { + expect(res.componentGenerics['scoped-slots-default']).toBe(true) + } + ) assertCodegen( // TODO vue-id '{{ user.lastName }}', - '', + '', function (res) { expect(res.componentGenerics['scoped-slots-default']).toBe(true) } ) assertCodegen( '{{ user.lastName }}', - '', + '', function (res) { expect(res.componentGenerics['scoped-slots-header']).toBe(true) } @@ -113,4 +120,4 @@ describe('mp:compiler-mp-weixin', () => { '' ) }) -}) +}) diff --git a/packages/uni-template-compiler/__tests__/compiler.spec.js b/packages/uni-template-compiler/__tests__/compiler.spec.js index cccdc17a8b8fad12e4f5ea044a8d34206ae591c6..ffe3352f7d72ec8869e989478761069a83a46887 100644 --- a/packages/uni-template-compiler/__tests__/compiler.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler.spec.js @@ -172,6 +172,8 @@ describe('mp:compiler', () => { it('generate single slot', () => { assertCodegen('', '') + assertCodegen('default', 'default') + assertCodegen('{{hello}}', '{{hello}}') assertCodegen('', '') }) diff --git a/packages/uni-template-compiler/lib/template/traverse.js b/packages/uni-template-compiler/lib/template/traverse.js index fcc98428c92303a096dbccf5d59f1782c0f84614..3954576e298881f26bcdccd18cf56341e1ef9342 100644 --- a/packages/uni-template-compiler/lib/template/traverse.js +++ b/packages/uni-template-compiler/lib/template/traverse.js @@ -164,7 +164,7 @@ function traverseCreateElement (callExprNode, state) { node.children = node.children.concat(normalizeChildren(traverseExpr(childNodes, state))) } else { node.children = normalizeChildren(traverseExpr(childNodes, state)) - } + } } return node } @@ -264,7 +264,7 @@ function genSlotNode (slotName, slotNode, fallbackNodes, state) { attr: { [prefix + 'if']: '{{$slots.' + slotName + '}}' }, - children: [slotNode] + children: [].concat(slotNode) }, { type: 'block', attr: { @@ -461,4 +461,4 @@ function traverseCreateTextVNode (callExprNode, state) { function traverseCreateEmptyVNode (callExprNode, state) { return '' -} +}