uni-app学习笔记十三-vue3中slot插槽的使用

在页面开发中,通常一个页面分为头部,尾部,和中心内容区。其中头部,尾部一般比较固定,而中心区域往往是多样的,需要自定义开发。此时,我们可以引入slot(插槽)来实现这一目标。<slot> 作为一个占位符,父组件传递进来的内容就会渲染在这里。

下面使用slot来实现2个页面中心区域的差异化开发:

项目结构如下:

1.在项目组件components文件夹里新建一个组件:xxy-layout,在xxy-layout.vue文件写入下面的代码:

html 复制代码
<template>
	<view class="layout">
		<view class="header">header区</view>
		<view class="main">
			<slot></slot>
		</view>
		<view class="footer">底部区</view>
	</view>
</template>

<script setup>

</script>

<style lang="scss" scoped>
    .layout{
		.header{
			height: 100px;
			background: #cfcfcf;
		}
		.main{
			min-height: 200px;
		}
		.footer{
			height: 120px;
			background: orange;
		}
	}
</style>

2.在demo1和demo2分别引入xxy-layout组件

demo1:

html 复制代码
<template>
	<view>
		<xxy-layout>
			<view class="row" v-for="item in 10">每一行{{item}}</view>
		</xxy-layout>
	</view>
</template>

demo2:

html 复制代码
<template>
	<view>
		<xxy-layout>
			<view class="box1"></view>
			<view class="box2"></view>
		</xxy-layout>
	</view>
</template>

<script setup>
	
</script>

<style lang="scss" scoped>
  .box1{
	  width: 100px;
	  height: 100px;
	  background: yellowgreen;
  }
  .box2{
  	  width: 100px;
  	  height: 100px;
  	  background: yellow;
  }
</style>

从而实现中心区域的差异化

如果一个页面多处需要用到slot,就需要用到具名插槽。此时demo1和demo2还像上面写,将会失效。对上面xxy-layout.vue进行调整,分别在header和main引入slot,此时需要添加name以示区分。

html 复制代码
<view class="header">
	<slot name="header"></slot>
</view>
<view class="main">
	<slot name="main"></slot>
</view>
	

此时再来看页面,中间的内容消失了,demo2也是一样。

因此使用具名插槽后,需要对引入子组件部分进行调整,

方法1:通过template v-slot来实现

html 复制代码
<xxy-layout>
	<template v-slot:header>
		demo1头部
	</template>
	<template v-slot:main>
		demo1中心区
	</template>
</xxy-layout>

效果:

方法2:使用#插槽名称

html 复制代码
<xxy-layout>
	<template #header>demo2头部</template>
	<template #main>demo2中心区</template>
</xxy-layout>

效果:

相关推荐
中屹指纹浏览器2 分钟前
2026住宅代理IP纯度检测、链路溯源与指纹浏览器适配调优方案
经验分享·笔记
憧憬成为web高手2 小时前
[HITCON 2017]SSRFme
学习
妖精的羽翼2 小时前
AI + 前端、可视化 & 大屏
学习
xuhaoyu_cpp_java9 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
小宋加油啊10 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
Xzh042311 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
Cloud_Shy61812 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
做cv的小昊12 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风12 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
sensen_kiss13 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.8 软件测试 (Software Testing)(上)
学习·软件工程