提交 c285cde3 编写于 作者: fxy060608's avatar fxy060608

fix(mp): v-slot can only be used on components or <template> tags

上级 6652d78c
......@@ -60,7 +60,7 @@ addMiniProgramPageJson(filename, {
},
})
assert(
`<van-button><template #default><view/></template></van-button>`,
`<custom><div>test</div></custom>`,
`<van-button u-i="dc555fe4-0"/>`,
`(_ctx, _cache) => {
return {}
......
......@@ -24,7 +24,7 @@ describe('compiler: transform v-slot', () => {
}`
)
assert(
`<custom><view>test</view></custom>`,
`<custom><div>test</div></custom>`,
`<custom u-s="{{['d']}}" u-i="2a9ec0b0-0"><view slot="d">test</view></custom>`,
`(_ctx, _cache) => {
return {}
......
......@@ -5,7 +5,7 @@ import {
import { ElementTypes } from '@vue/compiler-core'
import { NodeTransform } from '../transform'
export const transformTag: NodeTransform = (node, context) => {
export const transformTag: NodeTransform = (node, _) => {
if (!isElementNode(node)) {
return
}
......
......@@ -48,6 +48,7 @@ import {
} from './utils'
import { createVForArrowFunctionExpression } from './vFor'
import { DYNAMIC_SLOT } from '../runtimeHelpers'
import { transformTag } from './transformTag'
export const transformSlot: NodeTransform = (node, context) => {
if (!isUserComponent(node, context as any)) {
......@@ -127,6 +128,8 @@ export const transformSlot: NodeTransform = (node, context) => {
// <custom>test</custom> => <custom><template #default>test</template></custom>
const vSlotDir = createDirectiveNode('slot', 'default')
const child = implicitDefaultChildren[0] as ElementNode
// 此时处于父节点的 transform,child 还未被转换标签,故需要先转换,否则 isUserComponent 会判断失败,比如 div
transformTag(child, context)
const isSingleComponent =
implicitDefaultChildren.length === 1 &&
isUserComponent(child, context) &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册