插槽有三种:
目录
1.普通插槽
2.具名插槽
3.作用域插槽
1.普通插槽
sub.vue 子组件 --- 子组件写slot标签,父组件的Sub标签内填写的内容会显示在slot的位置,父组件如果不写内容就会展示默认内容。
<template><div class="card"><p>这是子组件本身的内容</p><slot>这是默认内容--如果父组件不传值就会展示这些</slot></div>
</template>
index.vue 父组件
<template><div class="card"><Sub><h2>我要传过去</h2></Sub></div>
</template>
展示效果:
2.具名插槽
sub.vue 子组件 --- 用name属性定义每个插槽的名字
<template><div class="card"><p>这是子组件本身的内容</p><slot name="slot1">这是第一个插槽</slot><p>穿插内容</p><slot name="slot1">这是二个插槽</slot><p>隔断内容</p><slot name="slot1">这是第三个插槽</slot></div>
</template>
index.vue 父组件 --- 父组件通过#号匹配子组件中对应的插槽位置
<template><div class="card"><Sub><template #slot1><h1>传递内容1</h1></template><template #slot2><h2>传递内容2</h2></template><template #slot3><h3>传递内容3</h3></template></Sub></div>
</template>
展示效果:
3.作用域插槽
sub.vue 子组件 --- message和count为子组件要传递给父组件的数据
<template><div class="card"><p>这是子组件本身的内容</p><slot message="123" count="1"></slot></div>
</template>
index.vue 父组件 --- 子组件传递过来的内容可以在父组件中使用,比如列表中点击取值
<template><div class="card"><Sub v-slot="slotProps"><h1>传递内容{{ slotProps.message }} {{ slotProps.count }}</h1></Sub></div>
</template>
或者:另一种写法---配合具名插槽
sub.vue 子组件
<template><div class="card"><p>这是子组件本身的内容</p><slot name="name" message="123" count="1"></slot></div>
</template>
index.vue 父组件
<template><div class="card"><Sub><template #name="slotProps"><h1>传递内容{{ slotProps.message }} {{ slotProps.count }}</h1></template></Sub></div>
</template>
展示效果: