关于企业官网当中的组件化插槽实例的使用<v-slot>

前言

【释义】插槽通俗讲就是:子组件预留一个坑位,父组件后期来填坑。插槽允许你在父组件中传递内容到子组件中的特定位置,这样你可以在子组件中定义一些可定制的区域。在Vue 3中,插槽有两种类型:默认插槽和具名插槽。

Vue组件化中,当我们在设计一个组件的时候,可能会保留一部分,供开发者使得自定义的内容,比如:

  1. 通用的弹出框、模态框、对话框等组件;
  2. 布局控制:插槽使布局更加灵活。你可以将插槽放置在组件的不同位置,以控制组件的布局结构和外观。
  3. 列表渲染:当你需要在列表中渲染不同的组件或元素时,插槽可以派上用场。它允许你在父组件中定义一个模板,然后在每个列表项中填充不同的内容。

总的来说,Vue 3 的插槽功能在许多业务场景中都能发挥重要作用,帮助你构建灵活、可复用和易于维护的组件和页面。

插槽类型

匿名插槽

匿名插槽是 Vue 中一种特殊类型的插槽,它允许父组件在子组件中插入任意的内容,并且这些内容不需要在父组件中进行具名定义。通俗来说,匿名插槽就像是一个容器,你可以在父组件中向子组件传递任意的内容,而子组件可以自由地在特定位置显示这些内容。 匿名插槽是一种特殊的具名插槽,也就是名为default的插槽

示例

mouse.vue

Vue 复制代码
<template>
    <div>
        <div class="text-base">下方是匿名插槽 也就是说#default</div>
        <slot></slot>
    </div>
</template>

<script setup lang="ts"></script>

<style lang="scss" scoped></style>

index.vue

Vue 复制代码
<template>
<div class="text-center">
    <mouseslot>
        <template #default> 默认插槽放置数据</template>
    </mouseslot>
</div>
</template>

<script setup lang="ts">
import mouseslot from "@/components/slots/mouse.vue";
</script>

<style lang="scss" scoped></style>

渲染出的:

具名插槽

具名插槽是 Vue.js 中一种功能强大的特性,它允许你在父组件中为子组件的插槽指定名称,并在子组件中使用这些名称来放置内容。这种方式让你可以更精细地控制组件之间的交互和布局。

具名插槽的使用场景包括但不限于:

  1. 多个插槽的情况: 当一个组件有多个插槽时,使用具名插槽可以让你更清晰地区分它们,并在父组件中指定要插入的内容。
  2. 动态布局: 具名插槽使得在父组件中动态地选择要放置的内容成为可能。这在需要根据条件动态显示内容的场景中非常有用。
  3. 组件复用: 具名插槽使得组件更具灵活性和可复用性。通过在子组件中定义具名插槽,父组件可以根据需要灵活地传递不同的内容。

示例

mouse.vue

vue 复制代码
<div>
    <!-- 默认插槽,命名为 "default" -->
    <slot name="default"></slot>

    <!-- 具名插槽,命名为 "slotOne" -->
    <slot name="slotOne">我是具名插槽slotOne </slot>

    <!-- 具名插槽,命名为 "slotTwo" -->
    <slot name="slotTwo">我是具名插槽slotTwo </slot>
</div>

index.vue

vue 复制代码
<div class="text-center">
    <mouseslot>
        <template #default>
                <p>默认插槽放置数据0</p>
        </template>

        <template #slotOne>
                <p>默认插槽放置数据1</p>
        </template>

        <template #slotTwo></template>
    </mouseslot>
</div>

动态插槽名

在 Vue.js 中,插槽名也可以是动态的,这使得你可以根据组件的状态或属性来动态地选择要使用的插槽。

vue 复制代码
<template>
    <div>
      <!-- 使用具名插槽,并根据 dynamicSlotName 动态选择插槽 -->
      <child-component :dynamicSlotName="slotName">
            <template v-if="slotName === 'header'" #header>
              <h2>这是动态头部内容</h2>
            </template>
            <template v-else-if="slotName === 'footer'" #footer>
              <p>这是动态底部内容</p>
            </template>
            <template v-else>
              <p>这是默认内容</p>
            </template>
      </child-component>
    </div>
</template>

<script lang="ts" setup>
import ChildComponent from './ChildComponent.vue';
const slotName = ref("header")
</script>

作用域插槽

作用域插槽(Scoped Slots)是 Vue.js 中的一个特性,它允许子组件在插槽中访问父组件的数据,从而在子组件中对数据进行处理和渲染。作用域插槽使得父组件可以向子组件传递更复杂的数据结构,并且让子组件可以更灵活地处理这些数据。

具体来说,作用域插槽的原理是,父组件可以在子组件中定义一个带有参数的插槽,并将数据作为参数传递给插槽。子组件在接收到数据后,可以在插槽中使用这些数据,并根据需要进行处理和渲染。

vue 复制代码
<!-- 

<template v-slot:slotThree="ceshi">
        <p>{{ ceshi.age }}</p>
</template> 

-->

<!-- 解构的方式 -->
<template v-slot:slotThree="{ personalName }">
        <p>{{ personalName }}</p>
</template>


<!-- 作用域插槽  -->
<slot name="slotThree" :message="props.customMessage" personalName="Anthony" age=22></slot>

最后

如果觉得文章可以,希望点个「点赞」,心情豁然开朗,工作如鱼得水。更多的知识总结和日常分享在公众号里分享啦【小李的李li】

相关推荐
街尾杂货店&2 分钟前
CSS - transition 过渡属性及使用方法(示例代码)
前端·css
CH_X_M14 分钟前
为什么在AI对话中选择用sse而不是web socket?
前端
Mintopia23 分钟前
🧠 量子计算对AIGC的潜在影响:Web技术的未来可能性
前端·javascript·aigc
街尾杂货店&23 分钟前
css - word-spacing 属性(指定段字之间的间距大小)属性定义及使用说明
前端·css
忧郁的蛋~40 分钟前
.NET异步编程中内存泄漏的终极解决方案
开发语言·前端·javascript·.net
水月wwww1 小时前
vue学习之组件与标签
前端·javascript·vue.js·学习·vue
合作小小程序员小小店1 小时前
web网页开发,在线%商城,电商,商品购买%系统demo,基于vscode,apache,html,css,jquery,php,mysql数据库
开发语言·前端·数据库·mysql·html·php·电商
顾安r1 小时前
11.8 脚本网页 塔防游戏
服务器·前端·javascript·游戏·html
草莓熊Lotso1 小时前
C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
前端·网络·c++·人工智能·后端·python·功能测试
fruge1 小时前
Canvas/SVG 冷门用法:实现动态背景与简易数据可视化
前端·信息可视化