首页 > 其他分享 >el-table 高亮行:只有设置表格数据才生效

el-table 高亮行:只有设置表格数据才生效

时间:2022-08-25 14:45:19浏览次数:56  
标签:el currentRow 高亮 表格 高亮行 table data selectRow

需求:

  1. 表格若有数据,则默认高亮第一行。
  2. 之前高亮的行,若在查询结果列表中,则保持高亮不变;反之,则高亮第一行。

解决办法

需求 1 很容易实现:

  created() {
    // 默认高亮第一行
    if (this.libTable.length) {
      this.selectRow(this.libTable[0])
    }
  },
  methods: {
      // 高亮行
    selectRow(row) {
      this.$nextTick(() => {
        this.$refs.libTable.setCurrentRow(row, true)
        this.currentRow = row
      })
    },
  }

针对需求 2:监听搜索框,内容改变则调用搜索接口,把新的结果赋值给 表格数据。

因为每次表格数据都会更新,所以原来的高亮行会消失,若想保持高亮行不变,则需要继续高亮该行,

因此需要监听表格数据,能否在表格中找到原来的高亮行,能找到就高亮它;反之则高亮第一行。

  watch: {
    // 监听搜索框
    'queryParams.name': {
      handler(newVal) {
        this.queryParams.pageNum = 1
        this.loadSysLibList()
      }
    },
    // 监听表格数据:若高亮行存在,则高亮,反之高亮第一行
    'libTable': {
      handler(newVal) {
        if (!newVal.length) return
        const target = newVal.find(ele => ele.name === this.currentRow.name)
        if (target) {
	 // this.selectRow(this.currentRow) // 高亮不生效
          this.selectRow(target)
        } else {
          this.selectRow(this.libTable[0])
        }
      },
      deep: true      
    }
  },
  methods: {
      // 加载系统库列表
    async loadSysLibList() {
      this.loading = true
      const data = await sysLibList(this.queryParams)
      if (data.code === 200) {
        this.total = data.data.total
        this.libTable = data.data.rows
        this.loading = false
      }
    },
  }

如果 this.selectRow(this.currentRow) 则高亮不生效。

但写为 this.selectRow(target) 高亮生效。

原因:this.currentRow 来源是之前的表格数据,不是目前最新的表格数据。而 el-table 的高亮方法要求必须是当前的表格数据,即使它们的值一样,但是内存地址不同。(打个比方:两套房子内部一摸一样,但这就是两套房子不是同一套房子)。

    // 获取选中行
    onRowClick(row) {
      this.currentRow = row
    },

image

把它俩打印出来,内部数据有些微差异:

image

标签:el,currentRow,高亮,表格,高亮行,table,data,selectRow
From: https://www.cnblogs.com/shayloyuki/p/16624161.html

相关文章

  • 通用导出excel服务
    1. 一般的后管在分页列表管理里都有导出功能我们的项目是先有分页管理,后面需求要求所有的分页再增加导出功用,所以后端采用统一导出的策略根据不同业务场景,多次调用对应......
  • vue集成elementUI
    vue集成elementUI1.使用npm安装elementui模块:指令:npm/cnpminstallelement-ui–S2.安装按需引入的插件:指令:npminstallbabel-plugin-component-D3.设置.babe......
  • Linux中的SELinux简单解释及如何禁用它
    简单理解SELinux是什么SELinux(SecurityEnhancedLinux为Linux提供了一种增强的安全机制,严格限制了用户进程主体(Subject)对服务器资源客体(Object)可以做的行为(Acti......
  • cf321 C. Ciel the Commander
    题意:用'A'~'Z'​给一棵树上的点染色,要求若两点字符相同则两点间的路径上一定有字符更小的点。思路:法一:点分治树的重心能把树划分成每块大小不超过\(n/2\)的连通块......
  • CF39J Spelling Check 题解
    很显然,这道题我们只需要快速判断字符串是否相等。马上想到字符串哈希,哈希算法可以 O(1)O(1) 匹配字符串。对于字符串哈希,我们先预处理出 basebase 的 kk 次方,不用......
  • vue中element-ui table滚动加载
    //1.在main.js里注册 Vue.directive('loadmore', { bind(el, binding) { const selectWrap = el.querySelector('.el-table__body-wrapper') selectWrap.ad......
  • cesium教程6-用entity绘制点线面label和billboard广告牌
      完整示例代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>cesium示例</title><!--引用cesium的js和css,天地图的扩展js-->......
  • 【elasticsearch】elasticSearch数据库配置慢查询日志
    给elasticSearch引擎配置慢查询日志,可以实时监控搜索过慢的日志。虽然ElasticSearch以快速搜索而出名,但随着数据量的进一步增大或是服务器的一些性能问题,会有可能出现慢查......
  • NPOI导出Excel添加条件格式
    privatevoidSetRule(XSSFSheetsheet){varconditionFormatting=sheet.SheetConditionalFormatting;AddConditionalFormatting(cond......
  • IfcGridPlacementDirectionSelect
    IfcGridPlacementDirectionSelect类型定义IfcGridPlacementDirectionSelect允许选择将网格放置定义为显式方向,或通过引用第二个网格交点来提供方向。 IFC4中的新选择......