赞
踩
Vue中插槽可以分为两种
<!-- 场景设置 -->
<!-- 父组件 -->
<div>
<test>我是slot中的内容</test>
</div>
<!-- 子组件:test -->
<main>
我在子组件中
<slot></slot>
</main>
普通插槽解析流程,父组件先解析,将test作为子组件处理,生成这样的节点
{
tag: 'div',
children: [{
tag: 'test',
children: ['插入slot中']
}]
}
子组件解析,slot作为一个占位符,会被解析成一个函数
// 子组件被解析成这样
{
tag: 'main',
children: [
'我在子组件里面',
// 不传递插槽的名称默认就是default, 如果传了就是传入的名称
_t('default')
]
}
<!-- 场景设置 --> <!-- 父组件 --> <div> <test> <template slot-scope="slotProps"> 插入slot中{{slotProps}} </template> </test> </div> <!-- 子组件:test --> <main> 我在子组件中 <slot :child="child"></slot> </main> data() { return { child: 111 } }
主要的解析流程如下:
{
tag: 'div',
children: [{
tag: 'test',
scopeSlots: {
default(slotProps) {
return ['插入slot中' + slotProps]
}
}
}]
}
{
tag: 'main',
children: [
'我在子组件中',
// 这里的{ child: 111 }就是传递给插槽中的数据
_t('default', { child: 111 })
]
}
最终会解析成
{
tag: 'main',
children: [
'我在子组件里面',
'插入slot 中 {child:11}'
]
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。