vue插槽的两种情况
默认/具名插槽:父传给子
一般用于父组件传递不同的数据给子组件,子组件根据这些数据提供固定的插槽位置。当父组件使用这些插槽时,会替换其设置的默认插槽内容。
具名插槽:子组件设置name
属性,父组件绑定v-slot:相应name
指令,注意是:
(为了区别于具名插槽)。默认插槽则不用。
父组件:1
2
3
4
5
6
7
8
9
10
11<template>
<Child>
<template v-slot:header>
<h1>这是header</h1>
</template>
<template #footer>
<!-- 简写 -->
<h1>这是footer</h1>
</template>
</Child>
</template>
子组件:1
2
3
4
5
6<template>
<div>
<slot name="header"></slot>
<slot name="footer"></slot>
</div>
</template>
作用域插槽:子传给父
一般用于同时使用父组件域内和子组件域内的数据,或子组件有固定数据,但在父组件中有不同的展现形式。
父组件:1
2
3
4
5
6
7<template>
<Child>
temolate v-slot="slotProps">
<h1>{{slotProps.data1}}</h1>
<h1>{{slotProps.data2}}</h1>
</Child>
</template>
子组件传递相应的属性(可以用v-bind)1
2
3
4
5<template>
<div>
<slot :data1="data1" data2="1"></slot>
</div>
</template>
具名插槽和作用域插槽可以同时使用,如<template v-slot:name="slotProps"></slot>
,即在v-slot后加上name属性,或简写#name
。
如找不到对应的插槽,则插入失败。