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 ''
-}
+}