uniapp插槽用法

目录

什么是插槽?

基本概念

默认插槽

命名插槽

作用域插槽

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

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


什么是插槽?

在 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的响应式函数refimport {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.mzph.cn/diannao/53150.shtml

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

相关文章

ELK系列之一---探索ELK奇妙世界:初识日志界大名鼎鼎的ES集群!

目录 一、为什么要使用ELK 二、ELK简介 三、Elaticsearch入门 3.1、什么是elaticsearch 3.2、elaticsearch的底层优点 3.2.1、全文检索 3.2.2、倒排索引 3.3、elaticsearch集群原理 一、为什么要使用ELK 一般我们需要进行日志分析场景&#xff1a;直接在日志文件中 gre…

Docker 镜像导出与加载:从入门到精通

在容器化技术的世界中&#xff0c;Docker 镜像的导出与加载是开发与运维人员经常会用到的技能。本文将详细介绍如何导出 Docker 镜像为本地 tar 文件&#xff0c;并如何将其重新加载为 Docker 镜像&#xff0c;并分享一些操作中的小技巧与趣味总结。 一、Docker 镜像导出的秘…

HTTP 二、进阶

四、安全 1、TLS是什么 &#xff08;1&#xff09;为什么要有HTTPS ​ 简单的回答是“因为 HTTP 不安全”。由于 HTTP 天生“明文”的特点&#xff0c;整个传输过程完全透明&#xff0c;任何人都能够在链路中截获、修改或者伪造请求 / 响应报文&#xff0c;数据不具有可…

vue2踩坑记录:el-select如何绑定对象

页面上的下拉框&#xff1a; 选中人员之后&#xff0c;需要使用人员的其它信息做后续操作。所以不能只绑定用户Id&#xff0c;需要绑定整个item(用户对象)&#xff0c;这样每次change事件所获取到的newValue是整个对象&#xff0c;而且v-model中的变量指向的也是整个对象&#…

解决el-table中使用el-input无法聚焦问题

在el-table中点击单元格时使用el-input或其他表单组件编辑单条数据。会出现聚焦不上的问题&#xff0c;需要手动点击才能够聚焦。究其原因是因为点击单元格时页面已自动聚焦到单元格&#xff0c;此时无法自动聚焦到对应的表单&#xff0c;需要手动设置。 <template><e…

进来一起把【数据结构】的【栈与队列】狠狠玩弄,痛快到大汗淋漓

1前言&#xff1a;顾名思义&#xff0c;栈与队列是两个东西&#xff0c;栈和队列&#xff01;对的&#xff0c;栈和队列&#xff01;&#xff01;&#xff0c;没错&#xff0c;在念一遍&#xff0c;【栈】 和 【队列】&#xff01;&#xff01;&#xff01;但是本质都是差…

数字化转型工具有哪些 无锡振宁科技

数字化转型已经成为现代企业不可忽视的趋势。为了帮助企业在这个过程中取得成功&#xff0c;选择合适的工具至关重要。今天&#xff0c;无锡振宁科技想和大家聊聊一些在数字化转型中不可或缺的工具&#xff0c;以及它们具体能带来哪些优势和变化。 1. 云计算平台 云计算是数字…

Yapi部署文档

Yapi是高效、易用、功能强大的API管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务 官网地址&#xff1a;Yapi 环境&#xff1a; l Git l NodeJs&#xff08;7.6&#xff09; l Mongodb&#xff08;2.6&#xff09; 1、 NodeJs的安装 获取资源 …

VBA学习(71):Excel VBA 访问带密码保护的Access数据库/用户窗体设置/EXCEL用户+密码登录界面(Access版)

前两天我们分享了一个用户密码登录EXCEL的案例【Excel VBA 用户窗体设置/一步一步代你设计EXCEL用户密码登录界面】&#xff0c;文中提及数据存储在Access中的情况&#xff0c;今天我就来把数据表&#xff08;tb用户&#xff09;移到Access中&#xff0c;修改一下代码&#xff…

cortex-m4系列绝对地址函数跳转问题

一、环境&#xff1a; cortex-m4&#xff0c;IAR&#xff0c;J-LINK。 二、问题&#xff1a; 1&#xff09;、首先&#xff0c; 我将另一个程序中的函数扣出来&#xff0c;通过j-flash-lite下载到MCU的一个固定地址Flash中。 2&#xff09;、然后&#xff0c; 声明一个变量为…

Elastic Stack--ELFK实例与Dashboard界面

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 学习B站博主教程笔记&#xff1a; 最新版适合自学的ElasticStack全套视频&#xff08;Elk零基础入门到精通教程&#xff09;Linux运维必备—Elastic…

低代码技术:简化应用开发,推动数字化转型

在当今快速变化的技术环境中&#xff0c;企业面临着巨大的压力&#xff0c;需要快速响应市场需求并持续推动数字化转型。传统的应用开发方式往往复杂且耗时&#xff0c;开发周期长且需要大量的编程工作。为了应对这些挑战&#xff0c;低代码技术应运而生&#xff0c;为企业提供…

oracle startup失败,ORA-01078: failure in processing system parameters

SQL> startup ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file /data/oracle/product/11.2.0/db_1/dbs/initorc1.ora 出错的原因可能是&#xff1a;文件名字不正确&#xff0c;文件权限不对&#xff0c;文件不存在&#x…

嵌入式系统------ARM

目录 一.c语言回顾 1.特殊符号 &#xff08;1&#xff09;const &#xff08;2&#xff09;static &#xff08;3&#xff09;extern 2.内存的结构 &#xff08;1&#xff09;kernel&#xff1a;内核 &#xff08;2&#xff09;栈区 &#xff08;3&#xff09;堆区 &#xff08…

Mental-LLM——通过在线文本数据利用大型语言模型进行心理健康预测

概述 源码地址&#xff1a;https://github.com/neuhai/Mental-LLM.git 论文地址&#xff1a;https://arxiv.org/abs/2307.14385 在一项关于哪些法律硕士适合精神健康护理的研究中&#xff0c;对以下五种法律硕士进行了比较 羊驼-7b。羊驼-LoRA。FLAN-T5-XXLGPT-3.5GPT-4. 作…

Qt QPushButton 按钮添加数字气泡

使用场景 项目中&#xff0c;在某个按钮的右上角添加数字气泡是一个很常见的功能&#xff0c;可以用新建一个组合类来实现。不过这样比较麻烦&#xff0c;如果加气泡是后面的需求&#xff0c;可能改动的地方较多。 下面介绍2种比较简单&#xff0c;不需要改动按钮响应的方式。…

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求&#xff0c; 需要安装一个监控软件&#xff0c;对SpringBoot程序进行监控&#xff0c; 包括机器上cpu, 内存&#xff0c;jvm以及一些日志的统计。 这里需要介绍两款软件&#xff1a; prometheus 和 grafana prometheus: 中文名称&#xff0c; 普罗米…

Excel 将行和列转置的两种方法

方法一&#xff1a; 方法二&#xff1a;使用transpose公式

Unity数据持久化 之 文件操作(增删查改)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ 这里需要弄清几个概念&#xff1a; File&#xff1a;提供文件操作的静态方法&#xff0c;是管理的 Windows.File -…

AI驱动测试管理工具会有哪些发展前景呢?

在软件测试领域&#xff0c;人工智能&#xff08;AI&#xff09;的出现犹如一场技术革命&#xff0c;改变了传统的测试管理方式。随着AI技术的迅速发展&#xff0c;它将如何进一步提升测试管理的效率与准确性&#xff1f;未来的AI驱动测试管理工具又会带来哪些令人期待的创新呢…