实现缓存el-table分页大小,用户新建标签打开该页面需保持分页大小(考虑是否为嵌入式页面)

news/2024/6/18 21:22:27 标签: 前端

需求:每个表格的分页大小 以本地缓存的方式存到浏览器本地,然后用户下次打开的时候 获取这个本地存储的值 如果没有就用页面默认的值,如果有 则先判断是不是有效的(是) 无效用默认 有效就用这个缓存值,需要区分是否为嵌入式页面

分析:


1、存页大小的时候 需要考虑一下嵌入页面 const ancestors = location.ancestorOrigins;

如果这个数组有长度 就把第一个 拿出做隔离;比如打开页面之后 开始拼接key 比如规则页面 我就取 key=`calc_${ location.ancestorOrigins[0],}` 去取值;如果没被嵌入 location.ancestorOrigins的长度就是0 就取不到值 key就直接取`cacl_`

意思是比如 我列表嵌入到a网址 他会给a网站存一个页大小 嵌入到b网站会给b网站保持一个页大小 互不相干


2、后面我们把那个列宽度和排序字段 查询条件 也可以存到这里面,所以我们直接使用存对象的方式key:{}


直接封装工具函数(可直接复制使用) 

在项目src文件夹下面的工具函数文件夹utils下  直接新建localStorageUtil.js,写入以下代码:

// 工具函数,用于存取分页大小、其他数据
export const useLocalStorageData = (keyPrefix = '', defaultData = {}) => {
    const getCacheKey = () => {
      if (location.ancestorOrigins.length) {
        return `${keyPrefix}${location.ancestorOrigins[0]}`;
      }
      return `${keyPrefix}`;
    };
  
    const getCacheData = () => {
      const cacheKey = getCacheKey();
   
      const cacheData = localStorage.getItem(cacheKey);
   

      if (cacheData) {
        return JSON.parse(cacheData);
      }
      return defaultData;
    };
  
    const saveCacheData = (data) => {
      const cacheKey = getCacheKey();
   

      localStorage.setItem(cacheKey, JSON.stringify(data));
    };
  
    const getData = (key) => {
      const cacheData = getCacheData();
      if (cacheData[key]!==undefined) {
        return cacheData[key];
      }
      return defaultData[key];
    };
  
    const saveData = (key, value) => {
     
      const cacheData = getCacheData();
      cacheData[key] = value;
      saveCacheData(cacheData);
    };
  
    // 返回需要暴露的属性和方法
    return {
      getData,
      saveData,
    };
  };

页面引入使用:

import { useLocalStorageData } from '@/utils/localStorageUtil.js'
const defaultPageSize = 10//默认分页大小

const { getData, saveData } = useLocalStorageData('calc_', {})

//列表查询方法
function getCalcRules(RuleName: string, pageSize: number, currentPage: number) {
  api.calcRules.getCalcRules({ RuleName: RuleName, PageSize: pageSize, Page: currentPage }).then(res => {
    if (res != null && res[0] != null && res[0].status == 200) {
      totalData.tableData = res[0].data.records
      totalData.total = res[0].data.Total
    }
  })
}


// 获取分页大小
const pageSize = ref(getData('pageSize') || defaultPageSize)
const currentPage = ref(getData('currentPage') || defaultcurrentPage)

const handleSizeChange = (val: number) => {
  saveData('pageSize', val)
  // 分页
  getCalcRules(RuleName.value, val, currentPage.value)//获取页面表格数据
}
const handleCurrentChange = (val: number) => {
  // 分页
  getCalcRules(RuleName.value, pageSize.value, val)//获取页面表格数据
}
// 获取初始页面本地数据
function getinitLocalData() {
  const cachedPageSize = getData('pageSize')
 

  // 如果本地缓存中不存在分页大小,则保存默认值

  if (cachedPageSize === undefined) {
    saveData('pageSize', defaultPageSize)
    pageSize.value = defaultPageSize
  } else {
    pageSize.value = cachedPageSize
  }


}
onMounted(() => {

  getinitLocalData()
  // 在获取到页码和页大小后,调用 getCalcRules 方法获取页面数据
  getCalcRules(RuleName.value, pageSize.value, currentPage.value)
})

如果以后还有表格搜索条件等数据需要缓存,可以按照上面关于pagesize的缓存和提取的方式进行缓存和提取


http://www.niftyadmin.cn/n/4931585.html

相关文章

Jpa与Druid线程池及Spring Boot整合(二): spring-boot-starter-data-jpa 踏坑异常处理方案

Jpa与Druid线程池及Spring Boot整合(一) Jpa与Druid线程池及Spring Boot整合(二):几个坑 附录官网文档:core.domain-events域事件 从聚合根发布事件 存储库管理的实体是聚合根。在领域驱动设计应用程序中,这些聚合根通常会发布领域事件。Sp…

每天一道leetcode:剑指 Offer 12. 矩阵中的路径(中等DFS深度优先遍历)

今日份题目: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元…

常见的 JVM 面试题分析

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ 8 个常见的 JVM 面试题分析。 1、什么时候会触发垃圾回收,Minor GC 和 Full GC 的区别? 垃圾回收 GC 是由 JVM 根据运行情况自动完成的,…

python接口自动化测试框架2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等

项目介绍 接口自动化测试项目2.0 软件架构 本框架主要是基于 Python unittest ddt HTMLTestRunner log excel mysql 企业微信通知 Jenkins 实现的接口自动化框架。 前言 公司突然要求你做自动化,但是没有代码基础不知道怎么做?或者有自动化…

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用,它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中,我们将重点介绍 RabbitMQ,一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…

Oracle时间查询使用笔记:sysdate用法

Oracle的sysdate用法 通常会有 sysdate - 1 / 12这种,或者sysdate - 1 / 24/3 这两种用法,表示从当前时间往前推若干时间 下面就用sysdate - A/B,sysdate - A/B/C代替 第一种 sysdate - A/B型,这种结果是小时,A代表天数,B代表小时…

CentOS7有线未托管,网络连接图标消失

问题描述 网络图标消失,显示“有线 未托管”,且无法连接网络 解决方案 ①编辑文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33 ②删除NM_CONTROLLEDno ③重启网络:service network restart 立马就可以自动连接上网络&…

七. 定时器

定时器 1. EPIT定时器(1) 特征&#xff1a;(2) 结构&#xff1a;(3) 工作模式&#xff1a;(4) 寄存器(5) 配置步骤(6) 定时器消抖 2. GPT 定时器(1) 特征(2) 结构(3) 工作模式(4) 寄存器<1> GPTx_CR 配置<2> GPTx_PR 分频<3> GPTx_SR 状态<4> GPTx_CNT…