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