vue模拟el-table演示插槽用法

很多人知道插槽分为三种,但是实际到elementui当中为什么这么用,就一脸懵逼,接下来就跟大家聊一聊插槽在elementui中的应用,并且自己写一个类似el-table的组件

vue的slot分为三种::匿名插槽,具名插槽, 作用域插槽,主要作用:让父组件可以向子组件指定位置插入 html 结构,也是一种组件间通信的方式,适用于父组件=>子组件

1、匿名插槽

匿名组件相当于一个占位符,将父组件的数据传入子组件的slot标签内

父组件:

<template><ChildSlot>父组件调用</ChildSlot>
</template>import ChildSlot from "@/components/ChildSlot";
export default {components:{ChildSlot}
}

子组件:

<template><h1>我是子组件</h1><slot></slot>
</template>export default {name: "ChildSlot"
}

运行结果如下:

此时父组件中的“父组件调用”这段内容就传递到了子组件,并填入了slot挖的坑当中

image-20230530092857777

2、具名插槽

具名插槽相当于给插槽添加了一个名字(给插槽加入name属性就是具名插槽)

父组件:

<template><child-slot><template v-slot:username>我是父组件传递的用户姓名</template></child-slot><child-slot><template v-slot:age>我是父组件传递的年龄</template></child-slot>
</template>import ChildSlot from "@/components/ChildSlot";
export default {components:{ChildSlot}
}

子组件:

<template><h1>我是子组件</h1><slot name="username"></slot><slot name="age"></slot>
</template>export default {name: "ChildSlot"
}

运行结果如下:

此时父组件中的根据slot的name,将内容填入了slot挖的坑当中,一个萝卜一个坑

image-20230530094754458

3、作用域插槽

与前两者的不同 slot自定义:name="值" 子组件可向父组件传递信息

父组件:

<template><child-slot><template v-slot="{username}">我是子组件传递的用户姓名:{{username}}</template></child-slot>
</template>import ChildSlot from "@/components/ChildSlot";
export default {components:{ChildSlot}
}

子组件:

<template><h1>我是子组件</h1><slot :username="username"></slot>
</template>export default {name: "ChildSlot",data(){return{username:'java',}}
}

运行结果如下:

通过作用域插槽,我们可以将子组件中的值传入到父组件,在父组件进行数据处理后,填坑到子组件

image-20230530101223625

4、模拟写一个el-table

先看一个el-table的例子,当需要对一行中的某一个单元格的内容进行处理的时候,需要用到slot插槽,例如下面的姓名name的处理

<template><el-table:data="tableData"style="width: 100%"><el-table-columnlabel="姓名"width="180"><template slot-scope="scope"><el-popover trigger="hover" placement="top"><p>姓名: {{ scope.row.name }}</p><p>住址: {{ scope.row.address }}</p><div slot="reference" class="name-wrapper"><el-tag size="medium">{{ scope.row.name }}</el-tag></div></el-popover></template></el-table-column><el-table-columnprop="address"label="地址"></el-table-column></el-table>
</template>

参照el-table,实现我们自己的table组件,讲解下为什么需要用插槽,用了哪些插槽

4.1为了传递table,首先通过匿名插槽,写一个的组件,目的就是模拟下面这三行内容

​ <el-table​ :data="tableData"​ style="width: 100%">

<template><div><slot></slot></div>
</template>export default {name: "MyTable"
}
4.2实现el-table-column,通过作用域插槽,写我们自己的el-table-column
<template><div><div><!--通过传递label标签,展示表头--><span v-if="label">{{ label }}</span></div><!--获取主页面的data值:$parent.$parent.$data.tableList--><div v-for="(user,index) in $parent.$parent.$data.tableList" :key="index"><!--当传递prop属性的时候,就取user用户的数据--><div v-if="prop">{{user[prop]}}</div><!--当不传递prop属性的时候,将用户的数据通过row属性,传递到父组件当中,也就是app.vue--><slot v-else :row="user"></slot></div></div>
</template>export default {name: "MyTableColumn",props: {prop: {type: String},label: {type: String}}
}
4.2调用my-table,my-table-column

我们通过my-table标签,将内容my-table和my-table-column放置到my-table的匿名插槽中,并通过子组件的props属性,接收prop和label。如同elementui一样,如果prop为空,子附件将父组件的user通过作用域插槽传递到父组件,并在父组件进行处理

<template><div><my-table :data="tableList" style="display: flex; flex-direction: row;"><my-table-column prop="name" label="姓名"></my-table-column><my-table-column prop="sex" label="性别"></my-table-column><my-table-column label="地址"><template v-slot="scope"><span style="background-color: deepskyblue">{{scope.row.address}}</span></template></my-table-column></my-table></div>
</template>import MyTable from "@/components/MyTable";
import MyTableColumn from "@/components/MyTableColumn";
export default {name: 'App',components:{MyTableColumn,MyTable},data(){return{tableList:[{name: 'java大师1',sex: '男',address: '西藏1'},{name: 'java大师2',sex: '男',address: '西藏2'},{name: 'java大师3',sex: '男',address: '西藏3'},{name: 'java大师4',sex: '男',address: '西藏4'}]}}
}

展示结果如下:

image-20230530105008626

参考文章:

1、Vue插槽的使用(匿名插槽、具名插槽、作用域插槽)以及ElementUI中table-column的slot-scope应用(scope.row、scope.$index、scope.column)_table-column 插槽-CSDN博客

2、Vue -- 插槽_vue插槽-CSDN博客

 

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

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

相关文章

线上项目修改最后一招 修改jar中的文件并重新打包成jar

解压jar包 在要操作的jar文件上边cmd打开命令提示符窗口&#xff08;windows系统&#xff09;&#xff0c; 在cmd命令下执行 jar -xvf xxx.jar 解压jar包&#xff08;其中xxx.jar换成你的jar包名&#xff09; jar -xvf admin-1.0.0.jar 替换或者更改操作 如果要替换jar压缩…

前端开发学习 (五) 生命周期函数、Ajax请求

关于vue实例的声明周期&#xff0c;从Vue实例创建、运行、到销毁期间&#xff0c;总是伴随着各种各样的事件&#xff0c;这些事件&#xff0c;统称为生命周期 &#xff08;https://cn.vuejs.org/v2/guide/instance.html#实例生命周期 &#xff09; 而声明周期勾子就是生命周期…

你是否需要可显示螺纹钢负偏差的测径仪?

面对严峻的市场形势&#xff0c;配合产品销售公司要求负偏差螺纹钢筋&#xff0c;确保产品质量达到标准要求&#xff0c;给用户提供合格满意的产品等&#xff0c;对螺纹钢进行负偏差轧制&#xff0c;既完成了降本增效&#xff0c;又满足了品质需求&#xff0c;更能提供客户更多…

docker-compose部署sonarqube 8.9 版本

官方部署文档注意需求版本 所以选择8.9版本 一、准备部署配置 1、持久化目录 rootlocalhost:/root# mkdir -p /data/sonar/postgres /data/sonar/sonarqube/data /data/sonar/sonarqube/logs /data/sonar/sonarqube/extensions rootlocalhost:/root# chmod 777 /data/sona…

ModStartCMS v7.7.0 集成内容区块,文件选择顺序

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

进程详解

进程 进程是什么 进程: 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。 进程 代码 数据 pcb pcb一般都叫task_struct pcb是什么 pcb是一种用来管理进程信息的数据结构 进程信息被存放在进程信息控制块的结构中 当程序运行起来时&#xff0c;可执行程序会…

Qt创建和使用动态库链接

首先建立库文件 顺序确认完成后&#xff0c;构建完成 注意&#xff1a;上图中mydll_global.h中的内容可以复制到mydll.h中去&#xff0c;在以后调用时只调用mydll.h即可&#xff0c;否则调用时需要两个头文件同事使用。 在mydll.h和mydll.cpp中可以正常编写代码&#xff…

Geoserver发布2000坐标系遇到的问题总结

在Geoserver上发布2000坐标系的服务时&#xff0c;要想正常发布服务&#xff0c;不仅仅是要涉及2000坐标系&#xff0c;还需要在发布的时候选择对坐标系。具体问题描述如下&#xff1a; 1.问题描述&#xff1a; 在发布好2000坐标系的服务后&#xff0c;在超图的平台加载服务时&…

Scrapy爬虫数据存储为JSON文件的解决方案

什么是JSON文件 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人们阅读和编写&#xff0c;同时也易于机器解析和生成。它基于JavaScript Spark语言的一个子集&#xff0c;但独立于Smashing语言&#xff0c;因此在许多中…

观测云实现日志存储与分析 10 倍性价比提升|SelectDB 技术团队

作者&#xff1a;观测云 CEO 蒋烁淼 & 飞轮科技技术团队 在云计算逐渐成熟的当下&#xff0c;越来越多的企业开始将业务迁移到云端&#xff0c;传统的监控和故障排查方法已经无法满足企业的需求。而观测云可提供整体数据的分析、洞察、可视化、自动化、监测告警、智能巡查…

基于ssm的房屋租售网站的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对房屋租售信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

解析操作系统是如何启动起来的?

操作系统被称为“第一个程序”&#xff0c;the first programme&#xff0c;原因很简单&#xff0c;只有当操作系统启动起来后才能运行我们编写的程序&#xff0c;那么你有没有想过这个问题&#xff1a;操作系统是怎样启动起来的呢&#xff1f;实际上这个过程就像发射火箭一样有…

kuboard如何部署redis?

在K8S上部署redis 如 在K8S上部署mysql 所述&#xff0c;auth-server、user-center、api-gateway 都需要使用 redis 服务&#xff0c;本文描述如何使用 Kuboard 在 Kubernetes 上部署 redis。 本文将使用 redis官方镜像 进行部署。 部署redis 在 Kuboard 界面进入名称空间 …

Leetcode—2477.到达首都的最少油耗【中等】

2023每日刷题&#xff08;五十&#xff09; Leetcode—2477.到达首都的最少油耗 算法思想 参考自灵茶山艾府 实现代码 class Solution { public:long long minimumFuelCost(vector<vector<int>>& roads, int seats) {int n roads.size() 1;vector<i…

iNet Network Scanner for Mac:简洁高效的WiFi网络扫描软件

随着无线网络的普及&#xff0c;WiFi网络已经成为我们日常生活中必不可少的一部分。无线网络的稳定性和速度对我们的工作和娱乐体验至关重要。因此&#xff0c;一款功能强大、简洁高效的WiFi网络扫描软件非常重要。今天&#xff0c;我们向大家推荐一款优秀的Mac平台WiFi网络扫描…

【软件测试】技术精选:Jmeter常见的几种报错

1、Java.net.UnknownHostException 这个错的含义是 没有连接到服务器地址&#xff0c;因此很可能是 内部网络中断导致。 2、502 Bad gateway 这个和本地的线程数无关 可能原因是网络抖动不稳定导致 3、java.net.SocketException: Socket closed 强制停止线程&#xff0c;连接…

Python绘图坐标轴数字要求三位分节的处理方法

比如说1000&#xff0c;用三位分节法的写法就是1 000&#xff0c;咱们操作的时候可以先式化字符串&#xff0c;用千位分隔符表示数字就是1,000&#xff0c;再把逗号换成空格。 import matplotlib.pyplot as plt import matplotlib.ticker as ticker# 示例数据 x [1000, 2000, …

vue 过滤器 (filters) ,实际开发中的使用

在实际开发中要判断不同的状态,要写很多重复的代码, 类似这样: 这样学麻烦, 不方便维护, 这时候可以用 filters 过滤器 在页面这样写就可以了

PET(Point-Query Quadtree for Crowd Counting, Localization, and More)

PET&#xff08;Point-Query Quadtree for Crowd Counting, Localization, and More&#xff09; 介绍实验记录训练阶段推断阶段 介绍 论文&#xff1a;Point-Query Quadtree for Crowd Counting, Localization, and More 实验记录 训练阶段 TODO 推断阶段 下面是以一张输…

4.8 构建onnx结构模型-Less

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Less 结点进行分析 方式 方法一&a…