Vue中插槽的使用

目录

一、默认插槽

(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>


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

配电室综合监测系统

配电室综合监测系统是一种集成了自动化、智能化等技术手段的电力监控系统。它通过对配电室内的电力设备进行实时监控、数据分析和处理&#xff0c;能够提高电力设备的安全性和效率&#xff0c;及时发现并解决电力故障和潜在问题&#xff0c;保证电力系统的稳定运行。 该系统通常…

MS5510模数转换器可Pin to Pin兼容TLC5510

MS5510 是 8 比特&#xff0c;20MSPS 模数转换器&#xff08;ADCs&#xff09;,同时使用一个半闪速结构。可Pin to Pin兼容TLC5510。MS5510在 5V 的电源电压下工作&#xff0c;其典型功耗只有 130mW&#xff0c;包括一个内部的采样保持电路&#xff0c;具有高阻抗方式的并行输出…

2024最新FL Studio21.2MAC电脑版中文版下载安装步骤教程

FL Studio 简称FL&#xff0c;全称Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前最新版本是FL Studio21.1.1.3750版本&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破…

【sprintboot+vue3】解决前后端分离项目遇到的问题

目录 一、Access to XMLHttpRequest at http://127.0.0.1:8088/api/hello from origin http://localhost:5173 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 二、报错[vue/compiler-sfc] 一、Access to …

人工智能革命:共同探索AIGC时代的未来

一、引言 随着大数据和强大的计算能力的兴起&#xff0c;人工智能技术&#xff08;AI&#xff09;正在快速发展&#xff0c;并为各个领域带来革命性的变化。人工智能与智能计算技术&#xff08;AIGC&#xff09;的融合不仅为企业、科研机构和普通用户提供了巨大的机遇&#xff…

LT8712EXI Type-C/DP1.2 to HDMI2.0/VGA Converter

Type-C/DP1.2 to HDMI2.0/VGA Converter Type-C/DP1.2 to HDMI2.0/VGA Converter  USB Type-C 接口  符合 USB TypeC 标准 V1.0 上的 VESA DisplayPort Alt 模式  符合 USB 供电规范 R2.0&#xff0c; V1.0版本  兼容USB Type-C电缆和连接器 规格 R1.2 内置双CC控制…

Web前端-HTML(表格与表单)

文章目录 1.表格与表单1.1 概述 2.表格 table2.1 表格概述2.2. 创建表格2.3 表格属性2.4. 表头单元格标签th2.5 表格标题caption&#xff08;了解&#xff09;2.6 合并单元格(难点)2.7 总结表格 3. 表单标签(重点)3.1 概述3.2 form表单3.3 input 控件(重点)type 属性value属性值…

星星粒子原生

使用技术&#xff1a;HTML、CSS 使用字体&#xff1a;iconfont 思路&#xff1a; 我们是要把星星围成一个圈儿然后每个星星都有次序按照不同的速度进行旋转放大然后缩小&#xff0c;整体上还会有不同的颜色定期改变首先找到五角星的字体⭐️&#xff08;我这里面用的是iconfon…

透明之光:探讨可解释性人工智能的前沿

导言 随着人工智能技术的飞速发展&#xff0c;可解释性人工智能&#xff08;Explainable AI, XAI&#xff09;成为关注焦点。本文将深入研究可解释性人工智能的背景、技术原理以及在不同领域的应用。 1. 背景与挑战 在许多领域&#xff0c;人工智能模型的黑盒性引发了关于决策…

详解wmvcore.dll丢失的解决方法

wmvcore.dll是一款由Microsoft开发的Windows系统文件&#xff0c;主要用于存储和处理多媒体文件&#xff0c;尤其是Windows媒体视频。该文件对于音频和视频的播放至关重要。如果电脑上缺少这个文件&#xff0c;可能会出现播放问题或者相关的应用程序运行错误。在本文中&#xf…

大四复习:深入浅出解释拓扑排序

我在大二学习拓扑排序的时候&#xff0c;不是很明白&#xff0c;现在已经大四&#xff0c;抽时间复习一下拓扑排序。 什么是拓扑排序&#xff1f; 如何实现拓扑排序&#xff1f; 拓扑排序的拓展 什么是拓扑排序&#xff1f; 首先拓扑排序的定义如下&#xff1a; 拓扑排序是一…

MybatisPlus【进阶】--悲观锁,乐观锁,生成后台数据:javafaker

什么是悲观锁 悲观锁&#xff1a;十分悲观&#xff0c;认为总是出现问题&#xff0c;无论干什么都会上锁&#xff0c;再去操作 悲观锁是基于一种悲观的态度类来防止一切数据冲突&#xff0c;它是以一种预防的姿态在修改数据之前把数据锁住&#xff0c;然后再对数据进行读写&…

如何在jenkins容器中安装python+httprunner+pytest+git+allure(一)

背景&#xff1a; API接口自动化使用python语言实现&#xff0c;利用httprunner框架编写自动化用例场景&#xff08;执行的时候还是依赖pytest),使用jenkins自动构建git上的源代码&#xff0c;并产生allure报告可视化展示API执行结果。 步骤 1.进入jenkins容器 注意使用roo…

文心一言 VS 讯飞星火 VS chatgpt (159)-- 算法导论12.3 6题

六、用go语言&#xff0c;当 TREE-DELETE 中的结点 z 有两个孩子时&#xff0c;应该选择结点 y 作为它的前驱&#xff0c;而不是作为它的后继。如果这样做&#xff0c;对 TREE-DELETE 应该做些什么必要的修改?一些人提出了一个公平策略&#xff0c;为前驱和后继赋予相等的优先…

使用 React 实现自定义数据展示日历组件

目录 背景实现日历组件父组件数据 效果最后 背景 项目中需要实现一个日历组件&#xff0c;并且需要展示月&#xff0c;日所对应的数据&#xff08;因为项目需求问题&#xff0c;就不统计年数据总量&#xff09;。网上找了一堆&#xff0c;基本都不大符合项目需求&#xff0c;且…

完全二叉数的全值

分析&#xff1a;我们主要是对数组分割&#xff0c;将每一类累加起来&#xff0c;按顺序存储在另一个数组里面&#xff0c;在对那一个数组进行是筛选&#xff0c;选出最大的那一个下标&#xff0c;在的打印那一个下标。 #include <stdio.h> int main(){int m,n,j,i,t1,s…

IO接口 IPC两个文件对话

实现AB进程对话。 1. A进程发送一-句话后&#xff0c; B进程接收到打印。然后B进程发送一句话&#xff0c;A进程接收后打印 2.重复上述步骤。直到AB接收或者发送完quit后&#xff0c; 结束AB进程 A文件 #include <func.h> #include <stdio.h> #include <errno…

面试必考精华版Leetcode1137. 第 N 个泰波那契数

题目&#xff1a; 代码&#xff08;首刷看解析&#xff09;&#xff1a; class Solution { public:int tribonacci(int n) {// 1.初始化if(n0) return 0;else if(n1) return 1;else if(n2) return 1;int p0,q1,r1;int s0;// 2.遍历方向 左 → 右for(int i 3; i < n ; i)…

openwrt docker nginx 站点搭建

应为家里一直是 openwrt 软路由&#xff0c;这样以来也不用 重新买服务器了&#xff0c;就直接在 openwrt 上面跑个 nginx就行了。把自己的一些东西就可以放上面了。资源再利用哈哈&#xff1b; 先 ssh 连接上 openwrt &#xff1a;我这里的 openwrt 最近刚更新的固件&#xff…

金蝶云星空修改业务对象标识

文章目录 金蝶云星空修改业务对象标识说明解决方案具体操作实操 金蝶云星空修改业务对象标识 说明 一个业务对象的产生&#xff0c;涉及10个表起。 解决方案 还是手工删除重新创建保险。 具体操作 先备份需要删除的元数据&#xff0c;或者扩展&#xff0c;然后重新创建或…