Vue中插槽的使用

news2024/11/28 14:37:08

目录

一、默认插槽

(1)概念

(2)代码展示

(3)后备内容

二、具名插槽

(1)概念

(2)代码展示

三、作用域插槽

        (1)概念

         (2)使用步骤

(3)用例展示


一、默认插槽

(1)概念

插槽究竟是什么呢?简单来说插槽就是用于决定将所携带的内容,插入到指定的某个位置。举个例子,比如说下面的图:

加入头部和底部都是写死的,但是我们希望主题部分不写死,那么这时候我们就需要用插槽了,也就是说插槽的作用就是让组件内部的一些结构支持自定义。

(2)代码展示

//fa.vue  子组件
<template>
  <div class="fa">
     <div class="header" style="border: 1px solid black;width: 200px; height: 200px;">  
        <h1>我是头部</h1>
        
     </div>
     <div class="main" style="border: 1px solid red; width: 200px; height: 200px;">
      <!-- 通过slot标签作为展示 -->
        <slot></slot>
     </div>

     <div class="footer" style="border: 1px solid blue; width: 200px; height: 200px;">
        <hr>
        <h1>我是底部</h1>
     </div>


  </div>
</template>


//父组件  App.vue

<script setup>
import fa from './components/fa.vue';
</script>

<template>
  <fa>我是动态插槽----</fa>


</template>

<style scoped>

</style>

(3)后备内容

封装组件时,可以为预留的<slot>插槽提供后备内容(默认内容)。

效果:

外部使用组件时,不传东西,则slot会显示后备内容

外部如果使用组件,传东西,则slot整体会被换掉,显示传的东西。

 <div class="main" style="border: 1px solid red; width: 200px; height: 200px;">
      <!-- 通过slot标签作为展示 -->
        <slot><p>不传东西就显示我</p></slot>
     </div>

二、具名插槽

(1)概念

与前面的默认插槽的作用也是一样的,不过具名具名,就是具有名字的插槽,起名字自然就是为了辨别是哪一个,也就是说一个组件内有多处结构,需要外部传入标签进行定制。

如下图的场景:

这次我想让头部主体和底部三部分都可以动态展示。

(2)代码展示

//App.vue   父组件

<template>
  <fa>
    <!-- 通过template配合,名字对应着标签,#head是简写,完整写法是:v-slot:head -->
  <template #head>
    我是头部
  </template>
<template #main>
我是中间的
</template>
<template #footer>
  我是下面的底部
</template>
  </fa>


</template>


//fa.vue   子组件

<template>
  <div class="fa">
     <div class="header" style="border: 1px solid black;width: 200px; height: 100px;">  
      <!-- 多个slot使用name属性区分名字 -->
       <slot name="head"></slot>
        
     </div>
     <div class="main" style="border: 1px solid red; width: 200px; height: 100px;">
      <!-- 通过slot标签作为展示 -->
        <slot name="main"></slot>
     </div>

     <div class="footer" style="border: 1px solid blue; width: 200px; height: 100px;">
       <slot name="footer"></slot>
     </div>


  </div>
</template>

<script setup>

</script>

<style>

</style>


三、作用域插槽

(1)概念

其实如果将插槽分类的话,插槽只分成两种,分别是默认插槽和具名插槽,作用域插槽并不在其中。

作用域插槽就是在定义slot插槽的同时,它是可以传值的,给插槽绑定数据,将来使用组件时可以用(父传子)。

(2)使用步骤

(1)给slot标签,以添加属性的方式传值

<slot :id=item.id msg='测试'></slot>

(2)所有添加的属性都会被收集到一个对象中

{
id:3,
msg:'测试'
}

(3)在template中,通过'#插槽名=obj'接收,默认插槽名为default

 <fa :list="list">
    <template #default="obj">
        <button @click=del(obj.id)>删除</button>
    </template>
</fa>

(3)用例展示

需求:创建一个表格,对表格每一行数据都可以进行删除,根据他的id值

//App.vue



<script setup>
import fa from './components/fa.vue';

import { ref } from 'vue'
const list=ref([
  {id:1,name:'张三',age:19},
  {id:2,name:'王五',age:28},
  {id:3,name:'赵楼',age:21},
  {id:4,name:'宋以',age:31},
  {id:5,name:'石头',age:16}
])

const del=(id)=>{
  console.log(id)
  //删除操作就是简单的数组过滤
  list.value=list.value.filter(i=>i.id!=id)
}
</script>

<template>
 
  <fa :list="list">
    <template #default="obj">
      这个是={{ obj.msg }}
      <button @click="del(obj.obj.id)">删除</button>
    </template>
  
  </fa>


</template>

<style scoped>

</style>

//fa.vue


<template>
  <div class="fa">
    <table style="border: 1px solid black;width: 500px;height: 500px;text-align: center; border-collapse: collapse;">
      <thead>
         <td>序号</td>
         <td>id</td>
         <td>name</td>
         <td>age</td>
         <td>操作</td>
      </thead>
      <tbody>
         <tr v-for="(item,index) in list" :key="item.id">
          <td>{{ index }}</td>
            <td>{{ item.id }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.age }}</td>
            <!-- 特殊定制,使用插槽占位 -->
            <td>
              <!-- 传递数据,以对象的形式来接收,比如下面的数据接收是
              {
                obj:{id:1,name:.......}
                msg:'测试'
              } -->
              <slot :obj="item" msg="测试"></slot>
            </td>
         </tr>
      </tbody>
    </table>
    <div>
      {{ list }}
    </div>

  </div>
</template>

<script setup>

const props=defineProps({
  list:Array
})
console.log('子组件')
console.log(props.list)
</script>

<style>
td,tr{
   border:1px solid black;
}

</style>


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

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

相关文章

【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 组合总和1 class So…

【计算机组成原理】存储系统基本概念与基本组成

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

FRP内网映射家用服务器至公网访问

兄弟们&#xff0c;服务器到货了&#xff0c;后续与大家分享内容就用它了。我预装的操作系统是Centos8,首先要解决的是远程访问的问题。 【特别注意】下述的端口&#xff0c;记得在阿里云安全组配置中放开端口入规则&#xff01;&#xff01; 1. FRP服务器配置 之前我有购买…

UDP多人聊天室

讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 UDP通信 主要的方向是一对多通信方式 UDP通信就是一下子可以通信多个对象&#xff0c;这就是UDP对比TCP的优势&#xff0c;UDP它的原理呢 就是…

Spring之容器:IOC(1)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

破译模式:模式识别在计算机视觉中的作用

一、介绍 在当代数字领域&#xff0c;计算机视觉中的模式识别是关键的基石&#xff0c;推动着众多技术进步和应用。本文探讨了计算机视觉中模式识别的本质、方法、应用、挑战和未来趋势。通过使机器能够识别和解释视觉数据中的模式&#xff0c;模式识别不仅推动了计算机视觉领域…

什么是回调函数

需求 A&#xff0c;B两个小组开发一个功能。B小组开发制作油条模块:make_youtiao。A小组需要调用B小组开发的模块&#xff0c;然后执行后续的操作&#xff1a;sell()如下图&#xff1a; 上面的方式A小组必须等待B小组开发的模块make_youtiao执行完成后才能执行sell()。 上图代…

JVM-2-对象

对象创建 当Java虚拟机遇到一条字节码new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加载过程。 为对象分配空间…

linux性能优化-cpu使用率

文章目录 1.CPU使用率2.节拍率的概念2.1.查看系统节拍率2.2.用户节拍率2.3.CPU使用率公式 3.怎么查看CPU使用率3.1.top显示系统总体CPU使用情况3.2.pidstat分析每个进程CPU使用情况 4.CPU使用率过高怎么办4.1.perf命令详解 1.CPU使用率 用什么指标来描述系统的CPU性能呢?不是…

SpringData JPA 整合Springboot

1.导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…

Oracle 透明网关安装

Oracle 11g透明网关连接Sqlserver oracle 透明网关是oracle连接异构数据库提供的一种技术。通过Gateway&#xff0c;可以在Oracle里透明的访问其他不同的数据库&#xff0c;如SQL Server, DB2, Sybase等等&#xff0c;就像远程Oracle数据库一样。配置后的sql查询的处理流程&…

架构设计系列之基础设施能力建设

周末聊两句&#xff1a; 今天将的基础设施能力建设部分&#xff0c;一般的架构书籍中都不存在的部分&#xff0c;这是我在实践过程中的经验和能力总结部分&#xff0c;希望和大家有一个很好的交流自从在 WeChat 中开了订阅号的两周半的时间&#xff0c;非常感谢大家的支持&…

Spring Boot 3 整合 Hutool 验证码实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

中通单号查询,中通快递物流查询,对需要的单号进行备注

批量查询中通快递单号的物流信息&#xff0c;对需要的单号进行备注。 所需工具&#xff1a; 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角的“…

vite原理

一、依赖预构建 1、为什么需要依赖预构建 CommonJS和UMD兼容性 在开发阶段中&#xff0c;vite的开发服务器将所有的代码视为原生ES模块。因此&#xff0c;vite必须先将作为CommonJS或者UMD发布的依赖项转换为ESM。 这是vite的一个特色&#xff0c;也是为什么会相对于webpack比…

ffmpeg6.0-ffplay.c源码分析(二)之整体框架大流程分析

文章目录 main()函数解读stream_open()函数解析event_loop函数解析关注公众号看全文: 想分析任何一个可执行程序,肯定从main()函数下手是比较合适的,ffplay的源代码也是如此。 main()函数解读 /* Called from the main */ int main(int argc, char **argv)

训练属于自己的大模型LM Studio使用记录

LM Studio 支持本地运营大模型 下载地址: https://lmstudio.ai/ 一 搜索下载管理 安装之后打开, 搜索对应大模型, 下载, 举例: baichuan 点击左侧菜单栏文件夹图标进行管理 二 聊天 点击左侧菜单栏聊天图标, 新建聊天, 输入框输入内容 可能对回答的结果并不满意, 我们可以…

实战经验:如何利用房产小程序提升客户满意度?

在当今的数字化时代&#xff0c;房产中介公司需要不断地适应市场变化&#xff0c;提供更加便捷、高效的服务。小程序作为一种轻量级的应用程序&#xff0c;具有无需下载、易于分享、随时可用等优点&#xff0c;可以为房产中介公司提供一个新的销售渠道。本文将介绍如何使用乔拓…

教师如何维护学生的自尊心

作为教师&#xff0c;我们不仅要传授知识&#xff0c;更要关心学生的身心健康&#xff0c;特别是他们的自尊心。自尊心是个人自我价值的重要体现&#xff0c;对学生的学习、生活和未来的发展都有深远的影响。因此&#xff0c;维护学生的自尊心是教师的重要责任。 教师要尊重每…

usart串口以及通信基本概念

文章目录 通讯的基本概念串行通信与并行通讯串行通信并行通信两种通信方式的比较 全双工、半双工及单工通讯概念**模型图** 同步通讯与异步通讯模型图同步通讯模型图异步通讯模型图 通讯速率比特率 (Bitrate) &#xff1a;波特率”(Baudrate)&#xff1a; USART——串口通讯串口…