首页 > 其他分享 >单选表格实现思路

单选表格实现思路

时间:2023-07-11 13:44:52浏览次数:25  
标签:selection 表格 selectedRow 勾选 单选 table 思路

element单选表格的实现,主要依靠elTable组件的 select 事件,假设存在如下表格:

以上面的表格为例子,可以通过如下步骤实现单选表格。

data

我们需要一个状态 tableData 用于存放表格的数据,还需要一个状态 selectedRow 用于存放当前勾选的行是数据。两个状态的默认值如下:

data() {
	return {
	  tableData: [], // 表格数据
	  selectedRow: null   // 当前选中行
	}
}

handleSelect

该方法是实现单选表格的核心方法,代码如下:

// 表格行勾选事件
handleSelect(selection, row) {
  // 判断是否存在选中元素
  if (selection.length === 0) {
	this.selectedRow = null
  } else {
	// 在selection中寻找row元素
	const { date } = row // 这里应该是用row的唯一的key
	const item = selection.find(i => i.date === date)
	if (item) {
	  // 找的到,说明本次是进行行勾选操作
	  this.selectedRow = row
	  // 取消全部勾选,然后单独勾选当前选中行
	  const table = this.$refs.table
	  table.clearSelection()
	  table.toggleRowSelection(row, true)
	} else {
	  // 找不到,说明本次是进行行取消勾选操作
	  this.selectedRow = null
	}
  }
}

代码思路都已经通过注释表明了,就不细说了。

tableTickEcho

表格勾选回显函数,这个方法是用来应对 selectedRow 存在默认值以及表格分页的情况。具体代码如下:

// 表格勾选回显
tableTickEcho() {
  const table = this.$refs.table
  // 因为是单选表格,尽可能不去全部遍历
  this.tableData.some(i => {
	if (i.date === this.selectedRow.date) {
	  table.toggleRowSelection(i, true)
	  return true
	}
  })
}

上面代码中的第6行,判断条件的key,需要根据实际情况去变更。

getTableData

获取表格数据,勾选回显方法就用在这里方法里。

// 获取表格数据
getTableData() {
  const list = [{
	date: '2016-05-02',
	name: '王小虎',
	address: '上海市普陀区金沙江路 1518 弄'
  }, {
	date: '2016-05-04',
	name: '王小虎',
	address: '上海市普陀区金沙江路 1517 弄'
  }]
  this.tableData = list
  // 判断是否需要回显
  if (!this.selectedRow) return
  // 避免出现未获取到实例的情况
  this.$nextTick(() => {
	this.tableTickEcho() // 表格勾选回显
  })
}

至此,功能方面已经完成。

样式问题

在element表格中,如果使用了 type=selection 的列,那么在表头会出现一个复选框。
image.png
这个复选框有着全选的语义,是不应该出现在单选表格中的,因此我们需要将其隐藏,一开始我的想法是用 slot=header 插槽去覆盖它,后来发现,当 type=selection 的时候,这个插槽并未其作用。[[element表格表头插槽源码阅读]]

进而考虑使用样式覆盖来将该复选框隐藏。

.el-table .el-table__header-wrapper th.el-table-column--selection.el-table__cell>.cell {
  display: none;
}

使得上面的css代码生效即可隐藏掉表格表头上的复选框,从而真正意义上完成一个单选表格。

标签:selection,表格,selectedRow,勾选,单选,table,思路
From: https://www.cnblogs.com/maccx/p/17544417.html

相关文章

  • mui用列表实现表格的增删改查
    我的需求是实现表格的增删改查,原需求是有两列的表,有三列的表,因为移动端的表格操作不方便,所以想采用以前常用的列表形式来实现。先看画面效果。 一,先用静态html代码,实现画面呈现的样式,采用列表嵌套表格的方法,表格可以约束列宽。<divclass="mui-table"><divclass="mui-......
  • 行行AI人才直播第9期:销氪副总裁陈摩西《AI在企业服务领域的商业化应用设计思路》
    人工智能 (AI) 正在颠覆几乎所有行业,并正在改变我们开展业务的方式。近年来,SaaS 行业一直是受影响最大的行业之一,人工智能在其指数级增长中发挥着至关重要的作用。随着AI技术逐渐落地和市场认可度的不断提高,越来越多知名的互联网公司,甚至传统行业公司也都在设立自己的AILab......
  • 跨平台轻量级RTSP服务模块设计思路及实现探讨
    技术背景为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,我们发布了轻量级RTSP服务模块,轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本地的音视频数据(如摄像头、麦克风),编码后,汇聚到内置RTSP服务,对外提供可供拉流的RTSP......
  • 搜索功能-实现思路
    四种搜索词搜索热词热词是一种由运维提前维护好的搜索词,会展示在搜索界面的搜索框下,用户可以点击直接搜索该热词的相关结果。运维维护好后,会双写到DB和Redis。接口查询时,会保存到本地缓存,有效期5分钟,所以维护了一个热词,需要五分钟后才能看到。热词会被视为keyword。联想词联......
  • Camstar表格自定义写js,实现单元格合并。
     效果: ......
  • [数据分析与可视化] 基于plottable库绘制精美表格
    plottable是一个Python库,用于在matplotlib中绘制精美定制的图形表格。plottable的官方仓库地址为:plottable。本文主要参考其官方文档,plottable的官方文档地址为:plottable-doc。plottable安装命令如下:pipinstallplottable本文所有代码见:Python-Study-Notes#jupyternoteboo......
  • 明明是张表格脸,怎么也长出了图片?(Excel批量处理图片合集)
    图片来源为函数类:Excel批量插入图片制图片的下拉选项图片就是图片类:批量插入图片把图片用在了数据透视表里只要是单元格对象的图片,不问出处:当函数遇上图片......
  • SSO单点登录基本概念实现思路以及小的实例详解
    一、什么是单点登录SSO(SingleSign-On)SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。二、单点登录解决了什么问题解决了用户只需要登录一......
  • 利用xlsx库导出页面表格为xlsx文件
    html<el-tableid="table"></el-table>jsimport*asXLSXfrom'xlsx'/** *导出表格为xlsx文件 *@param{string}id表格dom的id*/asyncfunctionexportTable(id,fileName){letwb=XLSX.utils.table_to_book(document.getEleme......
  • 高并发处理的思路和方法
    高并发处理的思路和手段处理高并发的六种方法1:系统拆分,将一个系统拆分为多个子系统,用dubbo来搞。然后每个系统连一个数据库,这样本来就一个库,现在多个数据库,这样就可以抗高并发。2:缓存,必须得用缓存。大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读......