创建一个文件tool
export interface IStorageStore {
expiredAt: number;
value: any;
}
export interface IGetStorageInfo {
expired: boolean;
expiredAt: number;
expiredIn: number;
value: any;
}
export default const App = {
setStorage(usage: string, value: any, options: ISetStorageOptions = { expiresIn: -1 }): void {
const key = storageKey(usage);
const expiresIn = options.expiresIn || -1;
let expiredAt;
function getExpiresAt(): number {
return expiresIn === -1 ? -1 : new Date().valueOf() + expiresIn * 1000;
}
if (options.expiresInOverwrite !== false) {
expiredAt = getExpiresAt();
} else {
const stored = window.sessionStorage.getItem(key);
if (typeof stored !== "undefined") {
const reuslt = JSON.parse(stored) as IStorageStore;
expiredAt = reuslt.expiredAt;
} else {
expiredAt = getExpiresAt();
}
}
try {
const data = {
value,
expiredAt,
};
window.sessionStorage.setItem(key, JSON.stringify(data));
} catch (error) {
console.log("缓存写入失败: ", error);
}
},
getStorageInfo(usage: string): IGetStorageInfo | null {
const key = storageKey(usage);
if (window.sessionStorage.getItem(key)) {
const storedContent = JSON.parse(window.sessionStorage.getItem(key) || "");
const now = new Date().valueOf();
const expiredAt = Number(Reflect.get(storedContent, "expiredAt") || -1);
const expiredIn = expiredAt - now;
const expired = expiredAt !== -1 && expiredIn <= 0;
let value = null;
if (expired) {
window.sessionStorage.removeItem(key);
} else {
value = Reflect.get(storedContent, "value");
}
return { expired, expiredAt, expiredIn, value };
} else {
return null;
}
},
removeStorage(usage: string): any {
window.sessionStorage.removeItem(usage);
},
}
页面使用
<template>
<div class="p-index">
缓存类
<input v-model="input" />
<button @click="handleSaveCache">保存缓存</button>
<button @click="handleGetCache">读取缓存</button>
</div>
</template>
<script lang="ts">
import { Options, Vue } from "vue-class-component";
import Tool from "@/tool/app";
@Options({})
export default class PageIndex extends Vue {
input = "";
handleSaveCache() {
Tool.setStorage("input", this.input, { expiresIn: 10 });
}
handleGetCache() {
const reuslt = Tool.getStorageInfo("input");
console.log(reuslt);
}
}
</script>
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/31c60b1fd9215c5d3931f1fda09c2c80.png)