当前位置: 首页 > news >正文

Vue插槽的使用场景

插槽(slot)是一种用于组件模版复用的技术,它允许你在子组件中预留一些位置,然后在父组件中填充内容。这样就可以在不同的地方使用同一个组件,但是在不同的地方显示不同的内容。
插槽主要分为默认插槽、具名插槽、动态插槽、插槽后备、作用域插槽。

默认插槽

// 父组件<div><slotChild>默认传值的方式</slotChild></div>
// 子组件
<template><div><slot></slot></div>
</template>

具名插槽

父组件的第一种写法

<slotChild><template v-slot:header><div>Title</div></template><div>具名插槽的内容</div>
</slotChild>

父组件内部内容的另一种写法

<template #header><div>Title</div>
</template>
<div>具名插槽的内容</div>

子组件的文件

<div><header><slot name="header">Default Header</slot></header><div><slot>default Content</slot></div>
</div>

动态插槽

parent.vue文件

<slotChild:headerSlotName="headerSlot":mainSlotName="mainSlot"><template v-slot:[headerSlot]><div>这是一个动态的头部</div></template><template v-slot:[mainSlot]><div>这是一个动态的内容渲染区域</div></template>
</slotChild>
import { defineComponent, onMounted, ref } from 'vue'
import slotChild from '@/components/slotChild.vue'export default defineComponent({name: 'parent',components: {slotChild},setup() {return {headerSlot: 'header',mainSlot: 'content',}}
})

slotChild.vue的文件

<div><header><slot :name="headerSlotName"></slot></header><main><slot :name="mainSlotName"></slot></main>
</div>
import { defineComponent } from "vue";export default defineComponent({name: 'slotChild',props: {headerSlotName: String,mainSlotName: String},
})

插槽后备

parent.vue文件

<slotChild><template v-slot:header><div>自定义头部内容</div></template>
</slotChild>

slotChild.vue文件

<div><header><slot name="header">Default Header</slot></header><main><slot name="main">默认的主体内容</slot></main>
</div>

在父组件中,只给header传值,主体内容采用默认的值。在大多数情况下,插槽后备与作用域插槽一起使用。

作用域插槽

parent.vue文件

 <slotChild><template v-slot:default="slotProps"><div>{{slotProps.user.name}}</div></template><template v-slot:header="headerProps"><div>{{headerProps.header.title}}</div></template>
</slotChild>

slotChild.vue文件

<div><slot :user="user"></slot><slot name="header" :header="header"></slot>
</div>
import { defineComponent, reactive } from "vue";export default defineComponent({name: 'slotChild',setup() {const user = reactive({name:'summer',age: '18'})const header = reactive({title: '标题',avatar: 'img地址'})return {user,header}}
})
http://www.lryc.cn/news/477394.html

相关文章:

  • Redis 下载安装(Windows11)
  • 求平面连接线段组成的所有最小闭合区间
  • 编译安装并刷写高通智能机器人SDK
  • 软考:案例题分析1101
  • 如何检查雷池社区版 WAF 是否安装成功?
  • 一周内从0到1开发一款 AR眼镜 相机应用?
  • vue3中setup的作用是什么?
  • java.io.FileNotFoundException: Could not locate Hadoop executable: (详细解决方案)
  • 事件捕获vs 事件冒泡,延申事件委托
  • 接口测试(十一)jmeter——断言
  • 使用buildx构建多架构平台镜像
  • 宠物领养救助管理软件有哪些功能 佳易王宠物领养救助管理系统使用操作教程
  • Spring Boot中实现多数据源连接和切换的方案
  • 科技资讯|谷歌Play应用商店有望支持 XR 头显,AR / VR设备有望得到发展
  • 关于read/write 网络IO、硬盘IO的区别
  • vue2开发 对接后端(go语言)常抛异常情况以及处理方法汇总
  • LSTM:解决梯度消失与长期依赖问题
  • Kafka在大数据处理中的作用及其工作原理
  • w~自动驾驶~合集5
  • Java优先队列的使用
  • 20241105,LeetCode 每日一题,用 Go 实现两数之和的非暴力解法
  • mysql之命令行基础指令
  • 使用Django Channels实现WebSocket实时通信
  • 「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
  • Spring-Day4
  • C#-类:成员属性
  • qt QDragEnterEvent详解
  • Vue项目与IE浏览器的兼容性分析(Vue|ElementUI)
  • 【C++之STL】一文学会使用 string
  • 好用的办公套件--- ONLYOFFICE