vue中的slot插槽,彻底搞懂及使用

1、使用slot站位,不传内容,显示默认值

//父组件
import SlotChild from './projectConstruction-child/SlotChild.vue'
<div>
    <SlotChild></SlotChild>
</div>

//子组件
<template>
  <div>下面是插槽内容</div>
  <div><slot>我是默认值</slot></div>
</template>

 2、使用slot站位,传内容,不显示默认值

//父组件
import SlotChild from './projectConstruction-child/SlotChild.vue'
<div>
    <SlotChild>text</SlotChild>
</div>

//子组件
<template>
  <div>下面是插槽内容</div>
  <div><slot>我是默认值</slot></div>
</template>

 

3、多个插槽时为了分清每一个插槽 所以需要  具名插槽  传值显示值,不传显示默认值

 

//父组件
<SlotChild>
                <template #header>
                  <h3>text</h3>
                </template>
                <template>
                  <h3>foot</h3>
                </template>
 </SlotChild>
//子组件
<template>
  <div>下面是插槽内容</div>
  <div><slot name="header">我是默认值</slot></div>
  <div><slot name="footer">我是默认值</slot></div>
</template>

 4、作用域插槽

//父组件  #main="data" 接收slot传来的值
<SlotChild>
                <template #header>
                  <h3>text</h3>
                </template>
                <template #main="data">
                  <h3>{{ data }}</h3>
                </template>
                <template>
                  <h3>foot</h3>
                </template>
 </SlotChild>
//子组件  传递数据slotArr
<template>
  <div>下面是插槽内容</div>
  <div><slot name="header">我是默认值</slot></div>
  <div><slot name="main" :arr="slotArr"></slot></div>
  <div><slot name="footer">我是默认值</slot></div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const slotArr = ref(['aaa', 'bbb', 'ccc', 'ddd'])
</script>

5、遍历数据

//父组件
<SlotChild>
                <template #header>
                  <h3>text</h3>
                </template>
                <template #main="data">
                  <ul>
                    <li v-for="e in data.arr" :key="e">{{ e }}</li>
                  </ul>
                </template>
                <template>
                  <h3>foot</h3>
                </template>
</SlotChild>
//子组件
<template>
  <div>下面是插槽内容</div>
  <div><slot name="header">我是默认值</slot></div>
  <div><slot name="main" :arr="slotArr"></slot></div>
  <div><slot name="footer">我是默认值</slot></div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const slotArr = ref(['aaa', 'bbb', 'ccc', 'ddd'])
</script>

 

### Vue2 中具名插槽(Named Slot)的用法 在 Vue2 中,具名插槽是一种强大的功能,允许父组件向子组件递多个具有特定名称的内容片段。通过 `slot` 属性指定插槽的名字,在模板中可以使用 `<template>` 或者直接嵌套 HTML 元素来实现。 以下是具体的用法说明以及示例: #### 基本语法 在子组件中定义具名插槽时,可以通过 `name` 属性为每个插槽命名: ```html <slot name="header"></slot> <slot></slot> <!-- 默认插槽 --> <slot name="footer"></slot> ``` 在父组件中使用具名插槽时,需将内容包裹在一个带有 `v-slot:slotName` 的 `<template>` 标签内或者直接使用带名字的 `<slot-name>` 形式的标签[^1]。 #### 示例代码 以下是一个完整的例子展示如何使用具名插槽: ##### 子组件 (ChildComponent.vue) ```vue <template> <div class="container"> <header> <slot name="header">默认头部</slot> </header> <main> <slot>默认主体内容</slot> </main> <footer> <slot name="footer">默认底部</slot> </footer> </div> </template> <script> export default { name: 'ChildComponent' } </script> ``` ##### 父组件 (ParentComponent.vue) ```vue <template> <child-component> <template v-slot:header> <h1>这是来自父组件的头部内容</h1> </template> <p>这是父组件入的主体内容。</p> <template v-slot:footer> <span>这是来自父组件的底部内容</span> </template> </child-component> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent } } </script> ``` 在这个例子中,父组件分别填充了名为 `header` 和 `footer` 的具名插槽,并提供了默认内容作为后备选项。 #### 关键点总结 - 使用 `name` 属性区分不同的插槽。 - 如果未提供具体插槽内容,则会显示默认内容。 - 可以通过 `v-slot:` 指令绑定到具名插槽上,也可以省略 `v-slot:` 并直接写成 `<template #header>` 的形式。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值