实现缓存el-table分页大小,用户新建标签打开该页面需保持分页大小(考虑是否为嵌入式页面)
需求:每个表格的分页大小 以本地缓存的方式存到浏览器本地,然后用户下次打开的时候 获取这个本地存储的值 如果没有就用页面默认的值,如果有 则先判断是不是有效的(是) 无效用默认 有效就用这个缓存值,需要区分是否为嵌入式页面
分析:
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的缓存和提取的方式进行缓存和提取