vue ts 本地缓存数据

vue ts 本地缓存数据

需求是:给每日最高热度的数据,每个用户弹窗三次,持续五秒
// 每日最高热度 弹窗三次
const popupKey = 'dailyPopupCount_';
const today = new Date().toISOString().split('T')[0]; // dailyPopupCount_2024-08-26
const popupCount = ref(parseInt(localStorage.getItem(`${popupKey}${today}`) || '0', 10));
export const showHost = ref(false); //最高热度弹窗
export const countdown = ref(0);
export let timer: number | null | any = null;
// 检查并更新弹窗显示状态
export const checkAndShowPopup = () => {
  if (popupCount.value < 3) {
    showHost.value = true;
    countdown.value = 5; // 初始化倒计时为5秒
    timer = setInterval(updateCountdown, 1000); // 每秒更新一次倒计时
    popupCount.value++;
    localStorage.setItem(`${popupKey}${today}`, popupCount.value.toString());
  }

  // 遍历 localStorage 中的所有项
  for (let i = localStorage.length - 1; i >= 0; i--) {
    const key = localStorage.key(i);
    if (key) {
      // 检查键是否以 dailyPopupCount_ 开头,并且是否不代表今天的日期
      if (key.startsWith(popupKey) && !key.endsWith(today)) {
        // 移除这个键
        localStorage.removeItem(key);
      }
    }
  }
};

// 手动关闭弹窗
export const hidePopup = () => {
  showHost.value = false;
  if (timer) {
    timeFun();
    clearTime();
  }
};

const timeFun = () => {
  // 隐藏弹窗并更新弹窗次数
  showHost.value = false;
  localStorage.setItem(`${popupKey}${today}`, popupCount.value.toString());
};

const clearTime = () => {
  clearInterval(timer!);
  timer = null;
};

// 更新倒计时
const updateCountdown = () => {
  if (countdown.value > 0) {
    countdown.value--;
  } else {
    timeFun();
    clearTime();
  }
};

字典数据的缓存可以通过将字典数据保存在Vuex状态管理中实现。在Vue3和TypeScript中,你可以按照以下步骤进行操作: 1. 在Vuex中创建一个模块来管理字典数据,可以使用`createStore`函数创建一个全局状态管理仓库。 2. 在该模块中定义一个状态变量来保存字典数据。 3. 创建一个Action用于异步请求字典数据,并将数据保存到状态变量中。你可以使用`axios`或`fetch`等工具发送HTTP请求。 4. 在组件中,使用`mapActions`辅助函数将Action映射到组件的方法中,以便在需要的地方调用。 5. 当组件需要使用字典数据时,先检查状态变量中是否已经存在数据。如果存在,直接使用;如果不存在,则调用Action去请求数据。 6. 可以将字典数据保存在本地缓存中,以便在页面刷新后仍然可以使用。可以使用`localStorage`或者`sessionStorage`来保存数据。 下面是一个示例代码,演示了如何在Vue3和TypeScript中实现字典数据的缓存: ```typescript // 在vuex模块中定义字典数据的状态变量和请求方法 const dictionaryModule = { state: { dictionaryData: null, // 字典数据 }, actions: { async getDictionaryData({ commit }) { // 检查本地缓存中是否存在字典数据 const cachedData = localStorage.getItem('dictionaryData'); if (cachedData) { commit('setDictionaryData', JSON.parse(cachedData)); } else { // 发送HTTP请求获取字典数据 const response = await axios.get('/api/dictionary'); const data = response.data; commit('setDictionaryData', data); // 将数据保存在本地缓存中 localStorage.setItem('dictionaryData', JSON.stringify(data)); } }, }, mutations: { setDictionaryData(state, data) { state.dictionaryData = data; }, }, }; // 在组件中使用字典数据 export default { methods: { ...mapActions(['getDictionaryData']), async fetchData() { await this.getDictionaryData(); // 请求字典数据 // 使用字典数据 // ... }, }, created() { this.fetchData(); }, }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值