Vue动图数据表格,根据字段是否为空,控制表格列的隐藏和显示

news2024/9/26 1:16:54

所在前面的话,我是个前端小白,大佬请绕行,可能大佬觉得很简单,但是我真的花了好几个小时去解决,所以记录一下,下次也可以作为参考。

我主要是以第二种方式进行修改的

开门见山

简述问题:大家都知道,Redis集群类型可分为Master-Slave和Cluster两种类型,而Master-Slave是实例,Cluster为分片。由于展示字段方面也一样,那么问题来了,如何在一个界面里面展示

先简单展示下效果

这是Master-Slave界面的展示效果

在这里插入图片描述

这是Cluster界面的展示效果

在这里插入图片描述

我们大概率也不会做两个界面,那么如何在一个界面里面实现这种效果呢

实现方式一 : el-table el-table-column 形式

要在 Vue 中的动态表格中添加数据列,并通过字段控制显示和隐藏,可以按照以下步骤进行:

1、在表格中添加要动态添加的列,例如:

<el-table :data="tableData" style="width: 100%">
  <el-table-column prop="date" label="日期" width="180"></el-table-column>
  <el-table-column prop="name" label="姓名" width="180"></el-table-column>
  <!-- 定义名为 "newColumn" 的插槽,用于动态添加数据列 -->
  <template v-slot:newColumn="{ row }">
    <!-- 根据 row 对象中的字段来判断是否显示此列 -->
    <el-table-column v-if="row.showNewColumn" prop="newColumn" label="新数据列" width="180"></el-table-column>
  </template>
  <el-table-column prop="address" label="地址"></el-table-column>
  <el-table-column fixed="right" label="操作" width="100">
    <template v-slot="scope">
      <el-button @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
      <el-button @click="handleDelete(scope.$index, scope.row)">删除</el-button>
    </template>
  </el-table-column>
</el-table>

在上面的代码中,我们定义了一个名为 “newColumn” 的插槽,并在其中添加了一个数据列,该数据列的显示与否取决于当前行数据中的 showNewColumn 字段。

2、在表格数据中添加相应的字段和数据,例如:

data() {
  return {
    tableData: [
      {
        date: '2023-04-11',
        name: '张三',
        newColumn: '这是一列新数据',
        showNewColumn: true,
        address: '上海市普陀区金沙江路 1518 弄',
      },
      {
        date: '2023-04-12',
        name: '李四',
        newColumn: '',
        showNewColumn: false,
        address: '上海市普陀区金沙江路 1517 弄',
      },
      // ...
    ]
  }
}

在上面的代码中,我们在表格数据中添加了一个 newColumn 字段,以及一个 showNewColumn 字段来控制该数据列的显示与否。

3、在需要动态添加数据列的地方,通过修改 showNewColumn 字段来控制数据列的显示与否,例如:

methods: {
  // 添加新的数据列
  addNewColumn(index) {
    this.tableData[index].newColumn = '这是一列新数据';
    this.tableData[index].showNewColumn = true;
  },

  // 删除数据列
  removeNewColumn(index) {
    this.tableData[index].newColumn = '';
    this.tableData[index].showNewColumn = false;
  },
  // ...
}

在上面的代码中,我们通过修改 showNewColumn 字段来控制数据列的显示与否,从而实现了在中间位置添加数据列,并通过字段控制显示和隐藏的效果。

实现方式二 非el-table 方式

这种方式的

{
            prop: "name",
            label: "IP地址:端口",
            fixed: true,
            minWidth: "120",
            align: "left",
          },

实现如下

1、首先在代码里面添加我们想要的列,截图如下

在这里插入图片描述

具体代码如下
instanceTitle: {
        RedisInstances: "实例列表",
        RedisSentinel: "Sentinel列表",
      },
      instances: {
        RedisInstances: [],
        RedisSentinel: [],
      },
instanceProp: {
        RedisInstances: [
          {
            prop: "name",
            label: "IP地址:端口",
            fixed: true,
            minWidth: "120",
            align: "left",
          },
          {
            prop: "role",
            label: "实例类型",
            minWidth: "120",
            align: "left",
          },
          {
            prop: "domainName",
            label: "域名",
            minWidth: "150",
            align: "left",
          },
          {
            prop: "machineName",
            label: "所属机器",
            minWidth: "120",
            align: "left",
          },
          {
            prop: "shardingName",
            label: "所在分片",
            minWidth: "120",
            align: "left",
          },
          {
            prop: "idc.idcName",
            label: "所在机房",
            minWidth: "140",
            align: "left",
          },
          {
            prop: "state",
            label: "运行状态",
            minWidth: "100",
            align: "left",
          },
        ],
        RedisSentinel: [
          {
            prop: "name",
            label: "名称",
            fixed: true,
            minWidth: "120",
            align: "left",
          },
          {
            prop: "idcName",
            label: "所在机房",
            minWidth: "140",
            align: "left",
          },
          {
            prop: "state",
            label: "运行状态",
            minWidth: "100",
            align: "left",
          },
        ],
      },

2、找到对应的el-table 父组件,我得截图如下

在这里插入图片描述

具体代码如下:
<el-row
      class="cluster-basic-info-body-row"
      v-for="(ins, key) in instanceProp"
      :key="key"
    >
      <el-card class="box-card" v-if="clusterInfo.mode != ':qae'">
        <div slot="header">
          <span>{{ instanceTitle[key] }}</span>
        </div>
        <el-table :data="instances[key]" stripe border max-height="500">
          <el-table-column
            v-for="(item, index) in ins"
            :key="index"
            :prop="item.prop"
            :label="item.label"
            :fixed="item.fixed"
            :min-width="item.shardingName == null ? 0 : item.minWidth"
            :align="item.align"
          >
            <template slot-scope="{ row, column }">
              <el-tag
                v-if="column.property === 'state'"
                :type="row.state === ':online' ? 'success' : 'warning'"
                size="mini"
              >
                {{ util.formatEnumeration(null, null,  row.state===':online'?"在线":"下线") }}
              </el-tag>

<!--              <span v-else-if="row.shardingName == null">
                {{ this.$set(column, 'minWidth', 0) }}
            </span>-->
              <span v-else-if="column.property === 'role'">{{ util.formatEnumeration(null, null, row.role) }}</span>
              <span v-else v-html="util.getColumnValue(row, column.property)"></span>
            </template>
          </el-table-column>
        </el-table>
      </el-card>
    </el-row>

代码解析如下:
主要是使用了 v-for 指令和条件渲染的 v-if 指令来生成一个包含多个 el-card 组件的 el-row 组件。

具体来说,v-for=“(ins, key) in instanceProp” 表示遍历 instanceProp 对象的属性,将每个属性的键值作为循环变量 key,每个属性的值作为循环变量 ins,然后根据这些变量来渲染组件。

v-if=“clusterInfo.mode != ‘:qae’” 表示只有当 clusterInfo.mode 不等于 ‘:qae’ 时才渲染 el-card 组件,即根据不同的数据来动态生成不同的组件。

在 el-card 组件中,使用了 v-for=“(item, index) in ins” 来遍历 ins 对象的属性,将每个属性的键值作为循环变量 index,每个属性的值作为循环变量 item,然后根据这些变量来渲染 el-table-column 组件。

el-table-column 组件中的各个属性用于配置列的显示方式,例如 :prop=“item.prop” 表示该列对应数据对象的属性名,:label=“item.label” 表示该列的表头标题,:fixed=“item.fixed” 表示该列是否固定,:min-width=“item.shardingName == null ? 0 : item.minWidth” 表示该列的最小宽度,:align=“item.align” 表示该列的文本对齐方式。

在 el-table-column 组件中,使用了 template 标签来定义列的内容模板,使用 slot-scope 属性来指定模板的作用域。在模板中,使用了 v-if 和 v-else-if 来根据列的属性值动态生成不同的内容,例如 v-if=“column.property === ‘state’” 表示当列的属性为 state 时,使用 el-tag 组件来显示状态信息。

最后,整个代码块包含在 el-row 组件中,使用了 :key 属性来指定组件的唯一标识。

3、代码主要修改实现如下:

<el-table-column
            v-for="(item, index) in ins"
            :key="index"
            :prop="item.prop"
            :label="item.label"
            :fixed="item.fixed"
            :min-width="item.minWidth"
            :align="item.align"
          >

改为

<el-table-column
            v-for="(item, index) in ins"
            :key="index"
            :prop="item.prop"
            :label="item.label"
            :fixed="item.fixed"
            :min-width="item.shardingName == null ? 0 : item.minWidth"
            :align="item.align"
            v-if="item.prop !== 'shardingName' || item.prop === 'shardingName' && instances[key][0].shardingName !== null"
          >

总结:

1、我主要修改的是第二方式,身为小白我不敢乱动之前的代码,所以只能在代码的基础上进行改动
2、将 ··· :min-width=“item.minWidth”··· 改为 :min-width=“item.shardingName == null ? 0 : item.minWidth”
3、在最后添加v-if 判断 v-if=“item.prop !== ‘shardingName’ || item.prop === ‘shardingName’ && instances[key][0].shardingName !== null”

结语

真的好简单呀,但不会就是不会,淦

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

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

相关文章

《这就是软件工程师》- 每位软件工程师值的看的一本书,尤其是刚刚步入IT行业的年轻人

文章目录第一部分&#xff5c;行业地图1、现实&#xff1a;为什么会有996&#xff1f;1&#xff09;行业处于特定的发展阶段2&#xff09;公司组织管理问题2、进阶&#xff1a;软件工程师的四大台阶1&#xff09;新手阶段【执行力】2&#xff09;进阶阶段【设计能力】3&#xf…

电子行业数字化工厂的发展现状如何

随着科技的不断发展&#xff0c;电子行业的生产制造方式也在不断地进步。数字化工厂建设是电子行业中的一个重要发展方向&#xff0c;它可以提高生产效率&#xff0c;降低生产成本&#xff0c;提高产品质量&#xff0c;减少人力资源的使用。本文将从数字化工厂的概念、发展历程…

Zookeeper总结

目录 1、概念 2、什么是Zookeeper 3、如何下载 4、部署运行 4.1、解压文件 4.2、修改配置文件 4.3、创建持久化目录 4.4、配置jdk 4.5、启动zookeeper服务 4.6、查看zookeeper运行状态 5、系统模型 5.1、数据模型&#xff08;文件系统&#xff09; 5.2、znode节点类型 持久…

Google FLASH-QUAD Transformer模型的设计雷点

这个模型用来做无序弱监督分类&#xff0c;效果好&#xff0c;特别是收敛速度比标准多头Attention层快多了&#xff0c;完全没得比。 问题1 但这模型我用来做自回归生成&#xff0c;非常垃圾。 同时尝试了 GPT 和 T5 这两种模型结构的设计&#xff0c;明明Loss正常下降&#…

环境变量相关知识

目录 目录 谢谢你的阅读&#xff0c;这是对我最大的鼓舞 先说结论&#xff1a; 开始论述&#xff1a; 让我们举个例子 相关指令 创建本地变量 创建环境变量 方法一&#xff1a; 方法二&#xff1a; 删除环境变量 子进程中也有环境变量 第一种&#xff1a; 第二种 …

【PlumGPT】与PlumGPT开启智能对话之旅

文章目录 一、前言二、PlumGPT介绍篇三、PlumGPT登录篇四、PlumGPT体验篇1、与PlumGPT聊天2、让PlumGPT翻译3、让PlumGPT创作4、请PlumGPT写推荐信5、让PlumGPT展示图片6、让PlumGPT充当百科小助手 五、PlumGPT总结篇 PlumGPT入口体验链接&#xff1a;https://plumgpt.com 一、…

【Kubernetes】 故障转移和自愈能力机制详解

文章目录一. 引言1. 介绍Kubernetes2. 故障转移和自愈能力的重要性二. Kubernetes 概览1. Kubernetes 架构2. Kubernetes 组件和功能三. 故障转移1. 如何定义故障转移2. Kubernetes 中的故障转移机制2.1 健康检查2.2 Pod 和 ReplicaSet2.3 控制器和故障转移3. Pods和ReplicaSet…

LS1028+TSN+Vxworks实时系统解决方案

TSN&#xff08;时间敏感网络&#xff09;正在各类市场兴起。它可以为过去不曾存在的全新应用提供实时通信。 例如&#xff0c;将控制功能从驱动中解耦出来并移至边缘计算。下一代自动控制器可以并行处理视频流和控制流等各种工作负载&#xff0c;在一台机器上运行全部深度学习…

【高危】Google Chrome V8 类型混淆漏洞(CVE-2023-2033)

漏洞描述 Google Chrome V8是Google开源的JavaScript和WebAssembly引擎&#xff0c;被用在Chrome和Node.js等浏览器和平台中。 该项目受影响版本存在类型混淆漏洞&#xff0c;攻击者可通过诱导用户打开恶意链接来触发此漏洞&#xff0c;可能导致浏览器崩溃或执行任意代码。由…

跟姥爷深度学习2 TensorFlow的基本用法

一、前言 前面我们浅用TensorFlow做了个天气预测&#xff0c;虽然效果不咋样&#xff0c;但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍&#xff0c;在接口文件的基础上了解各参数的简单含义和用法。 二、再次构建模型 我们先将之前的…

基于组合双向拍卖的共享储能机制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

规模化敏捷框架之LeSS

Scrum 是目前比较流行的敏捷框架&#xff0c;Scrum 敏捷开发团队由产品负责人&#xff08;Product Owner&#xff09;、敏捷教练&#xff08;Scrum Master&#xff09;、软件开发人员和其他合作人员组成。团队在这个指导框架下协同工作、开发、创造和交付有价值的产品来解决复杂…

易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化

2020年9月29日&#xff0c;《Cell Death Discovery》&#xff08;IF: 7.109&#xff09;杂志发表了题为“A defined N6-methyladenosine (m6A) profile conferred by METTL3 regulates muscle stem cell/myoblast state transitions”的研究论文&#xff0c;研究通过MeRIP-seq&…

静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查

文章目录前言一、建立时间检查1、寄存器到寄存器2、输入端口到寄存器3、寄存器到输出端口4、输入端口到输出端口二、保持时间检查1、寄存器到寄存器2、输入端口到寄存器3、寄存器到输出端口4、输入端口到输出端口前言 2023.4.11 继续学习STA&#xff0c;前面听的感觉好迷糊&am…

Android---性能优化之图片压缩

质量压缩 质量压缩会用到 Bitmap.compress()。 public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream); 这个方法有三个参数&#xff1a; Bitmap.CompressFormat format&#xff1a;图像的压缩格式&#xff08;jpeg ,png, webp&#xf…

C++STL大全----容器篇(上)

&#xff08;一&#xff09;概念 STL&#xff0c;英文全称 standard template library&#xff0c;中文可译为标准模板库或者泛型库&#xff0c;其包含有大量的模板类和模板函数&#xff0c;是 C 提供的一个基础模板的集合&#xff0c;用于完成诸如输入/输出、数学计算等功能。…

数据库第一个实验

啦啦啦啦啦&#xff0c;数据库终于要实验了&#xff0c;很担心做不好&#xff0c;要是挂了怎么办 只是自己的作业&#xff0c;可能会有问题&#xff0c;欢迎前来指正 一、题目&#xff08;100分&#xff09; 一、创建后面给出的这6个表&#xff08;20分&#xff09; 二、用不同…

Ubuntu20.04 个人配置和i3美化

Ubuntu20.04 个人配置和i3美化 本文是基于个人习惯和审美&#xff0c;快速配置一个新ubuntu的步骤。脚本在资源里给出&#xff0c;但仍有部分配置文件需在脚本执行后手动修改,文中已用红色字体标出 更新apt源 备份原来的源更换阿里源 # 备份 sudo mv /etc/apt/sources.list…

Camunda流程引擎查询接口API介绍

Camunda流程引擎底层采用了mybatis作为ORM框架&#xff0c;并封装了一套自己的数据查询接口&#xff0c;以下是几种可以Camunda流程引擎中查询数据的方式。 Java 查询API 。使用 Fluent Java API 来查询流程引擎实体&#xff0c;比如流程实例、任务等。REST 查询API 。通过 RE…

SpringMVC启动流程方式分析-三种方式

SpringMVC的启动方式 本文所叙述的是springmvc放入Tomcat servlet容器的启动方式 第一种Web.xml文件配置 使用传统的web.xml配置文件&#xff0c; 指定DispatchServlet &#xff0c;当然如果想要父子容器的效果指定一个ContextLoaderListener 上下文加载监听器就行&#xff…