概念:在父组件中,使用子组件时,子组件中的内容可能是固定的。但是有时候又需要将子组件中固定的内容进行替换。就可以使用插槽。
1 默认插槽
-
在子组件中设置插槽
<div> 我是头部 </div> <div> <slot>我的内容</slot> </div> <div> 我是底部 </div> -
在父组件中替换插槽中的内容
<son>default body</son>
2 具名插槽
如果一个组件内部有多个需要被替换的部分,可以使用具名插槽 v-bind:xxx="xxx" 在子组件中绑定一个值,该值可以传给父组件使用,这个绑定到
<slot>元素上的属性称之为 slot props。 在父作用域中,我们可以通过 slot-scope 来访问 数据
- 子组件 son.vue
<h3>作用域插槽</h3>
<div>
<!-- <div>
<slot name="head" :sonArr="arr">我是头部</slot>
</div> -->
<!-- 完整 v-bind:sonArr 下面是简写形式 -->
<div>
<slot :sonArr="arr">
<li v-for="(item,index)" in arr :key="index">
{{item.name}}
</li>
</slot>
</div>
</div>
- 父组件使用
<son>
<template slot-scope="scope">
<ul>
<li v-for="(item,index)" in scope.sonArr :key="index">
id-----{{item.id}}----name-----{{item.name}}
</li>
</ul>
</template>
</son>