码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 研发笔记——localstorage实现tabel表格表头自定义


    需求背景

    后台管理页面有一个非常大的表格,由于屏幕大小限制,需要滚动查看数据。
    不同的管理员关注的数据列不同,希望实现用户自定义表格展示顺序。

    方案分析

    1. 后端根据登录用户信息返回对应表头数据。(账号区分 + 后端存储)后端存储较简单,但需要服务端配合提供接口。
    2. 前端将表头数据保存LocalStorage。(浏览器区分 + 前端存储)

    具体实现

    示例基于vue+ivew实现,其他框架同理

    首先简单搭建一下页面结构

        
        <Table
          :columns="columns"
          :key="tableKey"
          :data="data"
    	...
        >...Table>
        
        
        <Modal>
        	<Table
            draggable
            :columns="tableHeadColumns"
            :data="columns"
            @on-drag-drop="tableHeadDrop" 
    	originColunms: [...] // 保存初始的数据表格表头结构
    	columns: originColunms, // 数据表的表头结构,同时也是表头表格的数据
    	data: [], // 数据表格的数据
    	tableHeadColumns: [], // 表头表格的表头结构
    }
    methods: {
     // 保存表格标题栏顺序、数量
      saveColumnsConfig() {
      // 拖拽API函数,接受参数为交换的两个位置下标
      tableHeadDrop(index1, index2) {
        ;[this.columns[index1], this.columns[index2]] = [this.columns[index2], this.columns[index1]]
        this.tableKey += 1 // 修改完成后要更新列表key,否则表头顺序调整无法更新到数据表格中
        this.saveColumnsConfig()
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这样就实现了调整表头顺序的功能,但是有个问题,页面刷新之后表格会恢复原始状态,这时候就需要用到localStorage来做存储

    methods: {
     // 将调整之后的表头数据保存在localStorage
      saveColumnsConfig() {
        const tempColumns = this.columns.map((item) => {
          const { slot = '', key = '', title = '' } = item || {}
          return {
            slot,
            key,
            title,
          }
        })
        localStorage.setItem('dataTableColumns', JSON.stringify(tempColumns))
      }
      // 拖拽API函数,接受参数为交换的两个位置下标
      tableHeadDrop(index1, index2) {
        ;[this.columns[index1], this.columns[index2]] = [this.columns[index2], this.columns[index1]]
        this.tableKey += 1
        this.saveColumnsConfig()
      }
    }
    // 页面加载的时候给columns赋值
    created() {
    	if (localStorage.getItem('dataTableColumns')) {
    		this.columns = JSON.parse(localStorage.getItem('dataTableColumns'))
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    到这里整个功能就实现了,需求中还有一个复原的按钮,实现方式就是将columns的值还原为originColunms
    但是这样的方案有个缺点,当服务端有数据列的修改时,需要用户手动还原一次。

  • 相关阅读:
    [Rust笔记] 我也浅谈【泛型参数】的【晚·绑定late bound】
    如何在vscode中添加less插件
    Postman 全局配置接口路径变量等
    抖音小店无货源,怎么能找到靠谱的货源?怎么和厂家进行沟通?
    【分析笔记】Linux gpio_wdt.c 看门狗设备驱动源码分析
    MAC地址、IP地址以及ARP协议详细讲解
    Vue+elementUI 导出word打印
    深度学习·理论篇(2023版)·第007篇实际应用中的维度与相关性:数据实际维度+举例说明局部泛化+不同数据到结果的映射函数对实际维度的影响
    肠道病毒组识别早产儿坏死性小肠结肠炎发病前的特异性病毒特征
    Visual Studio的调试bug
  • 原文地址:https://blog.csdn.net/e1172090224/article/details/131272890
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号