uniapp插槽用法

news2024/9/23 3:30:07

目录

什么是插槽?

基本概念

默认插槽

命名插槽

作用域插槽

场景一:子插槽向父组件传递一个字符串

场景二:子插槽向父组件传递对象


什么是插槽?

在 UniApp 中,插槽(Slot)是一种允许父组件向子组件特定位置插入HTML内容的方式。这种方式使得组件更加灵活,可以被复用在多种场景下,同时让父组件能够控制子组件的部分呈现内容。

基本概念

  1. 默认插槽:当没有特别指定插槽名称时,默认插槽就是指没有名字的插槽,可以在子组件中直接使用 <slot></slot> 标签来定义一个默认插槽的位置。

  2. 命名插槽:如果需要在子组件中定义多个插槽,可以通过 <slot name="slotName"></slot> 来定义具有特定名称的插槽。父组件则需要使用 <template v-slot:slotName>...</template> 或者更简洁的 <template #slotName>...</template> 来填充这些具名插槽。

  3. 作用域插槽:有时候父组件需要访问子组件的数据或属性,这时候就需要使用作用域插槽。子组件需要在 <slot> 标签中声明需要传递给父组件的数据,如 <slot name="slotName" :items="items"></slot>。父组件在使用这个插槽时,可以通过 v-slot:slotName="{ items }" 来接收这些数据,并根据这些数据进行渲染。


默认插槽

子插槽:<slot> 元素是一个插槽出口 (slot outlet),标示了父元素提供的插槽内容 (slot content) 将在哪里被渲染。

<template>
	<view class="all">
		<view class="header">
			头部
		</view>
		<view class="main">
			<slot></slot>
		</view>
		<view class="footer">
			底部
		</view>
	</view>
</template>

<script setup>

</script>

<style lang="scss" scoped>
	.header {
		position: sticky;
		top: 0;
		background-color: green;
		height: 100px;
		z-index: 1; // 确保头部始终在最上层
	}

	.main {
		height: 100px;
	}


	.footer {
		background-color: rosybrown;
		height: 120px;
	}
</style>

父组件:可以通过调用直接在组件内部编写代码,只适合一个插槽的场景

<template>
	<bdqn-header>
			661
	</bdqn-header>
</template>

<script setup>

</script>

<style scoped lang="scss">

</style>

命名插槽

子插槽:定义了多个插槽,会导致什么问题呢???

<template>
	<view class="all">
		<view class="header">
			<slot></slot>
		</view>
		<view class="main">
			<slot></slot>
		</view>
		<view class="footer">
			<slot></slot>
		</view>
	</view>
</template>

当出现多个插槽的时候会导致插入的时候,会在每个插槽都插入相同的数据

<template>
	<bdqn-header>
			661
	</bdqn-header>
</template>

调用插槽后会导致多个相同结构,使一个结构体重复出现多次

那么如何解决呢? 这个时候就可以用到命名插槽,在插槽标签slot中添加name属性,在调用的时候使用v-slot:名称来指定插槽插入,这样就可以避免一次性调用多个插槽,也可以简写为 #名称

<template>
	<view class="all">
		<view class="header">
			<slot name="header"></slot>
		</view>
		<view class="main">
			<slot name="main"></slot>
		</view>
		<view class="footer">
			<slot name="footerK"></slot>
		</view>
	</view>
</template>

调用子插槽的时候 通过添加 v-slot:名称 来指定插槽的位置

<template>
	<bdqn-header>
		<template v-slot:header>
			头部
		</template>
		<template v-slot:main>
			主体
		</template>
		<template v-slot:footerK>
			尾部
		</template>
	</bdqn-header>
</template>

<template>
	<bdqn-header>
		<template #header>
			头部
		</template>
		<template #main>
			主体
		</template>
		<template #footerK>
			尾部
		</template>
	</bdqn-header>
</template>

效果图:可以看见这样子就可以实现分别给多个插槽编写不同的实现代码


作用域插槽

作用域插槽就是可以让子插槽和父组件相互传值,相互访问

场景一:子插槽向父组件传递一个字符串

子插槽:通过name指定插槽的名称,定义一个text的变量并赋值 ( 语法 变量=值 )

<template>
	<view class="all">
		<view class="header">
			   <slot name="header" text="头部:我是一个字符串"></slot>
		</view>
		<view class="main">
		 <view>
		    <!-- 定义一个作用域插槽,并传递数据 -->
		    <slot name="main" text="局部:我是一个字符串"></slot>
		  </view>
		</view>
		<view class="footer">
			底部
		</view>
	</view>
</template>

父组件:

  • 通过 v-slot:header="{ text }" 定义了一个名为 header 的作用域插槽。
  • text 是从子组件传递过来的数据。
  • 在模板中通过 {{ text }} 显示传递过来的文本。
<template>
	<!-- 使用自定义组件 bdqn-header,并为其定义两个作用域插槽:header 和 main -->
	<bdqn-header>
		<!-- 定义 header 作用域插槽,并访问子组件传递的 text 数据 -->
		<template v-slot:header="{ text }">
			<view>{{ text }}</view>
		</template>

		<!-- 定义 main 作用域插槽,并访问子组件传递的 text 数据 -->
		<template v-slot:main="{ text }">
			<view>{{ text }}</view>
		</template>
	</bdqn-header>
</template>

运行效果


场景二:子插槽向父组件传递对象

子插槽:向父组件传递了一个items对象( 语法 :名称="传递的对象" )

<template>
	<view class="all">
		<!-- 头部区域 -->
		<view class="header">
			<!-- 使用插槽传递头部内容,提供默认文本 -->
			<slot name="header" text="头部:我是一个字符串"></slot>
		</view>
		<!-- 主要内容区域 -->
		<view class="main">
			<!-- 包裹一个view以便于统一管理插槽内容 -->
			<slot name="main" :items="items"></slot>
		</view>
		<!-- 底部区域,直接输出底部内容 -->
		<view class="footer">
			底部
		</view>
	</view>
</template>

<script setup>
	// 导入Vue的响应式函数ref
	import {
		ref
	} from 'vue';

	// 定义一个响应式的items数组,包含姓名和年龄信息
	var items = ref([{
		name: '张三',
		age: 18
	}, {
		name: '李四',
		age: 19
	}, {
		name: '王五',
		age: 25
	}])
</script>

<style lang="scss" scoped>
	.header {
		position: sticky;
		top: 0;
		background-color: green;
		height: 100px;
		z-index: 1; // 确保头部始终在最上层
	}

	.main {
		height: 100px;
	}


	.footer {
		background-color: rosybrown;
		height: 120px;
	}
</style>

父组件: 通过插槽接收子插槽传递的对象 ( 语法  #main="{items}"  ) 

  • 通过 #main 插槽展示列表项。
  • #main表示插槽指定的名称(name名称)
  • "{items}" 表示传递的对象,使用{}包裹
<template>
	<!-- 使用自定义组件bdqn-header来构建页面布局 -->
	<bdqn-header>
		<!-- 通过header插槽自定义头部内容 -->
		<template v-slot:header="{ text }">
			<view>{{ text }}</view>
		</template>

		<!-- 通过main插槽展示主体内容,通常用于列表展示 -->
		<template #main="{items}">
			<view v-for="item in items">
				{{item.name}}&nbsp;{{item.age}}
			</view>
		</template>
	</bdqn-header>
</template>

执行的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞DJSF1352型电子式直流电能表 CE/UL等资质认证

产品概述 DJSF1352型电子式直流电能表采用液品显示&#xff0c;具有RS485功能可与微机进行数据交换。适合充电桩直流计量、电池、太阳能电池板等直流信号设备电量测量和电能计量使用&#xff0c;亦可用于工矿企业&#xff0c;民用建筑&#xff0c;楼宇自动化等现代供配直…

JeecgBoot积木报表AviatorScript表达式注入漏洞复现

文章目录 漏洞信息漏洞复现环境搭建poc复现DNSLog验证 漏洞信息 影响组件&#xff1a;JimuReport积木报表 影响版本&#xff1a;v1.6.0 &#xff1c; JimuReport ≤ 1.7.8 漏洞名称&#xff1a;AviatorScript表达式注入漏洞 漏洞链接&#xff1a;积木报表软件存在AviatorSc…

强化学习实践(二):Dynamic Programming(Value \ Policy Iteration)

强化学习实践&#xff08;二&#xff09;&#xff1a;Dynamic Programming&#xff08;Value \ Policy Iteration&#xff09; 伪代码Value IterationPolicy IterationTruncated Policy Iteration 代码项目地址 伪代码 具体的理解可以看理论学习篇&#xff0c;以及代码中的注释…

Shader学习笔记

1. 渲染管线概述 定义&#xff1a;渲染管线&#xff08;流水线&#xff09;就是将数据分阶段的变为屏幕图像的过程 数据就是我们在游戏场景中放置的模型、光源、摄像机等等内容的数据 阶段就是渲染管线中的三个阶段&#xff1a;应用阶段一>几何阶段一>光栅化阶段 通过这…

超详细步骤——Keil MDK-ARM 如何修改工程名字

背景&#xff1a; 注意&#xff1a;本项目是基于 STM32 单片机的裸机程序&#xff0c;使用 STM32CubeMX 工具生成的 Keil MDK-ARM 工程。 目标&#xff1a; 在 Keil MDK-ARM 开发环境中&#xff0c;将名为version0805 的工程重命名为 version0910&#xff0c;并确保所有新编译…

PHP+Thinkphp+MySQL民宿管理系统41279-计算机毕业设计项目选题推荐(免费领源码)

摘 要 伴随着国内旅游经济的迅猛发展民宿住宿行在国内也迎来了前所未有的发展机遇。传统的旅游模式已难以满足游客日益多元化的需求&#xff0c;随着人们外出度假的时间越来越长&#xff0c;导致人们在住宿的选择上更加追求舒适、个性化的住宿体验。以往大家出游度假首选都是以…

Android图片缓存工具类LruCache原理和使用介绍

LruCache & DiskLruCache原理。 常用的三级缓存主要有LruCache、DiskLruCache、网络&#xff0c;其中LruCache对应内存缓存、 DiskLruCache对应持久化缓存。Lru表示最近最少使用&#xff0c;意思是当缓存到达限制时候&#xff0c;优先淘汰近 期内最少使用的缓存&#xff0c…

传输层协议---TCP协议

以下都是自己的学习总结&#xff0c;有不足也有错误的地方&#xff0c;谨供参考。 TCP协议特点 ---面向字节流&#xff0c;有连接&#xff0c;可靠&#xff0c;全双工 面向字节流 面向字节流指的是服务器和客户端之间的数据传输&#xff0c;使用的字节流传输&#xff0c;获取…

Git 使用指南 --- 远程仓库

序言 在这篇文章中&#xff0c;我们将理解分布式版本控制系统&#xff0c;学习远程仓库与本地仓库的交互操作&#xff0c;掌握多⼈协作开发模式。 1. 理解分布式版本控制系统 前两篇中的所有内容都是针对于在本地的文件管理&#xff0c;Git 的强大之处肯定不仅仅只是体现于此。…

jupter_notebook简单介绍以及安装使用

目录 jupyter简单介绍&#xff1a; Jupyter&#xff1a; Jupyter的主要特点包括&#xff1a; 1. 交互式编程&#xff1a; 2. 文档和代码的整合&#xff1a; 3. 易于分享和协作&#xff1a; 4. 丰富的扩展性&#xff1a; 5. 社区支持&#xff1a; 6. 支持多种内核&#…

基于SpringBoot房屋租赁管理系统【包含运行步骤】

基于SpringBoot房屋租赁管理系统【包含运行步骤】 一、项目简介二、技术选型三、运行步骤1. 项目启动 四、项目演示前台页面展示管理员后台管理源码获取方式 总结 大家好&#xff0c;这里是程序猿代码之路&#xff0c;在当今社会&#xff0c;随着城市化进程的加快&#xff0c;房…

Git之2.29版本重要特性及用法实例(六十二)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

亿图机床采集数据

这个数控系统的英文名是HUST,在台湾知名度还可以,但大陆这边我做这么多年项目也只接触过屈指可数的几次,可见市场占有率并不大。下面是一些介绍: 台灣億圖 HUST CNC 是一個充滿活力的公司,我們經營的目標是提供能滿足客戶之優良產品,以及優質的服務。我們的期望是使 HUS…

学习笔记--Docker

安装 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2.配置Docker的yum库 首先要安…

七,Spring Boot 当中的 yaml 语法使用

七&#xff0c;Spring Boot 当中的 yaml 语法使用 文章目录 七&#xff0c;Spring Boot 当中的 yaml 语法使用1. yaml 的介绍2. yaml 基本语法3. yaml 数据类型4. 学习测试的准备工作4.1 yaml 字面量4.2 yaml 数组4.3 yaml 对象 5. yaml 使用细节和注意事项6. 总结&#xff1a;…

产业园区智慧招商解决方案

1. 项目背景与挑战 2023年&#xff0c;产业园区在智慧招商领域面临诸多挑战&#xff0c;包括传统推广方式、信息分散、跨部门协作障碍、缺乏主动服务、服务流程改进困难以及数据档案管理不善。 2. 方案思路 解决方案围绕“一套秘籍”和“一套流程”&#xff0c;服务三方角色…

OpenAI即将推出自然语音功能

&#x1f989; AI新闻 &#x1f680; OpenAI即将推出自然语音功能 摘要&#xff1a;测试博客testingcatalog揭示OpenAI正在通过逆向工程ChatGPT应用&#xff0c;计划增加更自然的语音朗读功能。未来可能推出8种新语音&#xff0c;具有独特代号&#xff0c;能表达动物叫声等非…

(苍穹外卖)day05 店铺营业状态设置 功能测试

目录 一.Redis入门 Redis简介 二.Redis数据类型 三.Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 四.在java中操作Redis Redis的java客户端 ​编辑 五.店铺营业状态设置 代码开发 Redis---是一个数据库&…

浅谈信创浪潮下,职业院校人才培养有哪些新思路

一、信创产业发展背景 1.1 国家战略意义 信创产业&#xff0c;即信息技术应用创新产业&#xff0c;是国家战略发展的关键方向。近年来&#xff0c;在全球化的竞争和合作背景下&#xff0c;中国高度重视信息技术的自主创新能力&#xff0c;通过政策扶持、资金投入和市场引导等…

【数据结构】—— 栈与队列

目录 前言一、栈1.1 堆栈原理1.2 栈的实现 二、队列2.1 队列的概念2.2 队列结构2.2.1 顺序队列2.2.2 链队 2.3 队列的实现 三、堆与栈的区别3.1 内存中的堆与栈3.2 数据结构中的堆与栈 结语 前言 在单片机数据处理的时候&#xff0c;如果在中断里添加太多函数&#xff0c;可能会…