vue之插槽-slot
1.背景
2.slot简单使用

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>--> <script src="../js/vue.js"></script> </head> <body> <h2>插槽slot简单使用</h2> <pre> 1.定义:通俗的来说就是html中的变量,你可以理解为html替换,他要实现的功能非常类型之前我们使用jquery的 $("#id").html('要替换的内容') 2.官方的定义大家自己百度 需求: 1. 定义一个组件; 2.组件内部的内容可以根据使用者替换 </pre> <hr> <h2>案例如下:</h2> <div id="app"> <c-child1></c-child1> ------------------------- <c-child1> <div>父类替换你的值</div> </c-child1> </div> <!--子组件模板1--> <template id="child1id"> <div> 我是一个子组件 <div> <slot>这是我的默认内容,使用者可以替换</slot> </div> </div> </template> <script> let app = new Vue({ el: '#app', // 组件 components: { 'c-child1': { template: '#child1id', } } }) </script> </body> </html>
3.具名插槽

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>--> <script src="../js/vue.js"></script> </head> <body> <h2>插槽slot-具名插槽</h2> <pre> 1.当多个插槽时,我们替换的内容到底替换那个插槽呢,这时候我们就需要给插槽去一个名字 2.可以利用slot 元素的一个特殊的特性:name来定义具名插槽 需求: 1. 定义一个组件; 2. 组件内3个插槽,分别为网页的头部、主体、脚部 </pre> <hr> <h2>案例如下:</h2> <div id="app"> <c-child1> <div slot="header">填充头部</div> <div slot="body">填充主体</div> <div slot="footer">填充脚部</div> </c-child1> </div> <!--子组件模板1--> <template id="child1id"> <div> <div> <slot name="header">头部</slot> <slot name="body">主体</slot> <slot name="footer">脚部</slot> </div> </div> </template> <script> let app = new Vue({ el: '#app', // 组件 components: { 'c-child1': { template: '#child1id', } } }) </script> </body> </html>
4.父组件控制插槽中的数据显示方式

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>--> <script src="../js/vue.js"></script> </head> <body> <h2>插槽-实现子组件提供数据-父组件提供展示样式</h2> <pre> 需求: 1. 提供一个子组件含插槽和一组数据; 2. 父组件控制数据在插槽中的显示方式; 备注: 实际生产中子组件获取到数据后,可能要在不同环境的父组件中做不同的展示 </pre> <hr> <h2>案例如下:</h2> <div id="app"> 展示方式一: <c-child1> <!-- slotProps2 可以自定义--> <template slot-scope="slotProps2"> <ul> <!-- slotProps2.data 取出插槽绑定在上面的data--> <li v-for="item in slotProps2.data">{{item}}</li> </ul> </template> </c-child1> ----------------------- <br> 展示方式二: <c-child1> <template slot-scope="slotProps2"> <ul> <li v-for="(item,index) in slotProps2.data">{{index+1}}-{{item}}</li> </ul> </template> </c-child1> </div> <!--子组件模板1--> <template id="child1id"> <div> <!-- 这里的data不乱取名字,只能是data--> <slot :data="orderList"></slot> </div> </template> <script> let app = new Vue({ el: '#app', // 组件 components: { 'c-child1': { template: '#child1id', data() { return { orderList: ['书籍', '水果', '键盘', '水杯'] } } } } }) </script> </body> </html>
完美!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人