Vue 组件基础——插槽

本文详细介绍了Vue中的插槽基本语法,包括定义与使用、具名插槽以及作用域插槽。通过实例演示了如何在父组件中利用子组件的插槽展示自定义内容和共享数据。
摘要由CSDN通过智能技术生成

一、插槽基本语法

Vue为组件的封装者提供了插槽slot),插槽是开发者在封装组件时不确定的希望由组件的使用者指定的部分。也就是说,插槽是组件封装期间为组件的使用者预留的占位符,允许组件的使用者在组件内展示特定的内容。通过插槽,可以使组件更灵活、更具有可复用性。

1.1定义与使用插槽

组件中,通过<slot>标签定义插槽,从而在组件中预留占位符

<slot>插槽的默认内容</slot>

使用插槽在父组件中使用子组件的插槽,在使用时需要将子组件写成双标签的形式,在双标签内提供插槽内容。

 <子组件>插槽内容</子组件>

1.2具名插槽

Vue中当需要定义多个插槽时,可以通过具名插槽来区分不同的插槽具名插槽给每一个插槽定义一个名称这样就可以在对应名称的插槽中提供对应的数据了

插槽通过<slot>标签来定义,<slot>标签有一个name属性,用于给各个插槽分配唯一的名称,以确定每一处要渲染的内容。添加name属性的<slot>标签可用来定义具名插槽

<slot name="插槽名称"></slot>

父组件中,如果要把内容填充到指定名称的插槽中,可以通过一个包含v-slot指令的<template>标签来实现,语法格式如下。 其中v-slot:可以简写为#

<子组件名>

  <template #插槽名称></template>

</子组件名>

1.3作用域插槽

 一般情况下,在父组件中不能使用子组件中定义的数据。如果想要在父组件中使用子组件定义数据,则需要通过作用域插槽来实现作用域插槽带有数据的插槽子组件提供一部分数据插槽父组件接收子组件的数据进行页面渲染。

封装组件的过程中,可以为预留的插槽定义数据供父组件接收并使用子组件中的数据。在作用域插槽中,可以将数据类似传递props属性的形式添加到<slot>标签上

<slot message="Hello Vue.js"></slot>

在使用具名插槽时,插槽属性可以作为v-slot的值被访问到,基本语法格式为“v-slot:插槽名称="形参",简写形式为“#插槽名称="形参"”,使用简写形式使用插槽的示例代码如下。(在Vue中,每个插槽都name属性,表示插槽的名称。默认插槽在定义时虽然省略<slot>标签的name属性,但是name属性默认为default。) 

<MyHeader>

  <template #header="{ message }">

    {{ message }}

  </template>

</MyHeader>

二、代码演示

创建MySlot.vue组件:

<template>
    <slot headMessage="Vue.js插槽" name="header"></slot>
    <hr>
    <slot bodyMessage="插槽的定义与使用、具名插槽、作用域插槽" name="body"></slot>
    <hr>
    <slot :user="user" name="foot"></slot>
</template>

<script setup>
import { reactive } from 'vue'
const user = reactive({
    name: 'XuPin',
    telephone: '156xxxxx',
    email: '1127xxx@qq.com'
})
</script>

创建MySlotFather.vue组件:

<template>
    <MySlot>
        <template #header="{headMessage}">
            <p>标题:{{ headMessage }}</p>
        </template>
        <template #body="{bodyMessage}">
            <p>主题内容:{{ bodyMessage }}</p>
        </template>
        <template #foot="{ user }">
            <p>
            联系人:{{ user.name }}<br>
            电话:{{ user.telephone }} <br>
            邮箱:{{ user.telephone }}</p>
        </template>
    </MySlot>
</template>

<script setup>
import MySlot from './MySlot.vue'
</script>

浏览器显示结果:

  附本节项目代码下载地址:

链接:https://pan.baidu.com/s/19O-XwblGVB1xlcdXF-fFAQ?pwd=8888 
提取码:8888

当我们封装一个 Vue 组件时,可以使用插槽(slot)来让组件的使用者可以在组件内部插入内容。使用插槽可以让我们的组件更加灵活和可复用。 在组件内部,我们可以使用 `slot` 标签来声明一个插槽。例如: ```html <template> <div class="my-component"> <h2>这是组件的标题</h2> <slot></slot> </div> </template> ``` 上面的代码中,我们在组件的模板中使用了 `slot` 标签,这个标签表示这个组件需要一个插槽。使用这个组件的时候,我们可以在组件标签内部插入任意的内容,这些内容会被插入到 `slot` 标签的位置上。 例如,我们可以这样使用这个组件: ```html <template> <div> <MyComponent> <p>这里是插入到组件中的内容</p> </MyComponent> </div> </template> ``` 这样,`<p>这里是插入到组件中的内容</p>` 就会被插入到组件的模板中的 `slot` 标签的位置上。 如果我们需要多个插槽,可以给 `slot` 标签添加一个 `name` 属性来区分不同的插槽。例如: ```html <template> <div class="my-component"> <h2>这是组件的标题</h2> <slot name="header"></slot> <div class="content"> <slot></slot> </div> <slot name="footer"></slot> </div> </template> ``` 上面的代码中,我们声明了三个插槽,分别是名为 `header`、`default` 和 `footer` 的插槽。使用这个组件时,我们可以这样插入内容: ```html <template> <div> <MyComponent> <template v-slot:header> <h3>这是头部插槽的内容</h3> </template> <p>这里是默认插槽的内容</p> <template v-slot:footer> <p>这是底部插槽的内容</p> </template> </MyComponent> </div> </template> ``` 上面的代码中,我们使用了带 `v-slot` 的 `<template>` 标签来指定要插入哪个插槽,例如 `v-slot:header` 表示要插入到名为 `header` 的插槽中。在 `<template>` 标签内部,我们可以插入任意的内容,这些内容会被插入到对应的插槽位置上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值