Vue 3 中的插槽(Slots)用法

插槽(Slots)是 Vue 组件中一种非常有用的功能,用于在父组件中向子组件传递内容。Vue 3 引入了 <script setup> 语法,使得组件的写法更加简洁和易读。在本篇博客中,我们将探讨在 Vue 3 中使用插槽的不同方式,包括默认插槽、具名插槽以及作用域插槽。

默认插槽

默认插槽是 Vue 组件中最简单的插槽用法。它允许我们在父组件中传递内容到子组件,并在子组件中使用 <slot> 标签来接收这些内容。

父组件模板:

<template>
  <ChildComponent>
    <p>这是通过默认插槽传递的内容</p>
  </ChildComponent>
</template>

子组件模板:

<template>
  <div>
    <slot name="header"></slot>
    <slot name="footer"></slot>
  </div>
</template>

作用域插槽

作用域插槽允许父组件向子组件传递数据,并在子组件中使用 v-slot 指令来接收这些数据。

父组件模板:

<template>
  <ChildComponent>
    <template v-slot="{ message }">
      <p>{{ message }}</p>
    </template>
  </ChildComponent>
</template>

子组件模板:

<template>
  <div>
    <slot :message="data.message"></slot>
  </div>
</template>

<script setup>
const data = {
  message: "这是通过作用域插槽传递的数据",
};
</script>

在使用作用域插槽时,父组件可以向子组件传递数据,子组件使用 v-slot 指令来接收数据。我们可以在子组件中通过 slot 标签的属性来访问这些数据。

栗子:

父组件:

<template>
  <AboutView title="没事">
    <img src="" alt="">
//省略地址
  </AboutView>
  <AboutView title="还行" :listData="games">
    <ul v-for="(game,index) in games" :key="index">
      <li>{{ game }}</li>
    </ul>
  </AboutView>
  <AboutView title="优势" >
    <video src="" controls style="width: 200px;height: 200px;"></video>
  </AboutView>
</template>
<script setup>
import AboutView from './views/AboutView.vue';
const games=["英雄联盟","永劫无间","PUBG"]
</script>

子组件:

<script setup>
import { defineProps } from "vue";

const props = defineProps(['title']);
</script>
<template>    
    <div>
        <!-- 使用props.title来显示标题 -->
        <h2>{{ title }}</h2>
        <!-- 其他组件内容 -->
        <slot></slot>
  </div>
</template>

 

 

总结起来,在 Vue 3 中,插槽的使用方式与 Vue 2 中有一些不同。使用 <script setup> 语法可以简化组件的写法,但在定义插槽内容时,我们需要使用 v-slot# 来指定具名插槽或作用域插槽。而在子组件中,使用 slot 标签来接收插槽内容,并可以通过 slot 标签的属性向子组件传递数据。

Vue 3,作用域插槽(scoped slots)是一种用于将父组件的数据传递给子组件的技术。作用域插槽允许你在子组件使用父组件的数据,并将其渲染到子组件模板。 使用作用域插槽,你可以将父组件的数据传递给子组件,并在子组件的模板使用该数据。这样就可以在父组件定义一个插槽,然后在子组件使用该插槽来访问父组件的数据。 要在Vue 3使用作用域插槽,首先在父组件定义一个插槽,并使用`v-slot`指令给它一个名称。然后,在子组件使用`<template v-slot:插槽名称>`来引用该插槽,并在该插槽可以访问到父组件传递的数据。 以下是一个示例,展示了如何在Vue 3使用作用域插槽: 父组件模板: ```html <template> <div> <child-component> <template v-slot:default="slotProps"> {{ slotProps.data }} </template> </child-component> </div> </template> ``` 子组件模板: ```html <template> <div> <slot :data="someData"></slot> </div> </template> ``` 在这个示例,父组件通过`v-slot:default`定义了一个名为"default"的插槽,并在插槽使用了`slotProps`作为插槽的参数。子组件使用`<slot>`来声明插槽,并通过`:data`属性将数据传递给插槽。 当父组件渲染时,子组件插槽将被替换为父组件传递的数据,并在子组件的模板显示出来。 希望这个示例能帮助你理解Vue 3的作用域插槽用法。如果有任何问题,请随时提问!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝啵啵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值