vue 路由前置守卫+meta+localstorage设置有时间限制的缓存

工具函数

/**

 * set item

 *  name

 *  value

 *  expires, ms

 */

  setItem(name, value, expires) {

    if (!localStorage) {

      console.log('unsupport localStorage');

      return;

    }

    var obj = {};

    obj.value = value;

    if (expires) obj.expires = Date.now() + expires;

    localStorage.setItem(name, JSON.stringify(obj));

  },

  /**

   * get item

   *  name

   */

  getItem(name) {

    if (!localStorage) {

      console.log('unsupport localStorage');

      return;

    }

    var objStr = localStorage.getItem(name);

    var obj;

    try {

      obj = JSON.parse(objStr);

    } catch (e) {

      console.log('json parse error:');

      console.log(e);

    }

    if (!obj) return;

    if (obj.expires && obj.expires < Date.now()) {

      localStorage.removeItem(name);

      return;

    }

    return obj.value;

  },

路由添加

        meta: {

          keepAlive: true,

          require:true,

        }

路由前置守卫

router.beforeEach((to, from, next) => {

  if (to.meta.require == true) {

    if (tools.getItem(to.fullPath)) {

      to.meta.keepAlive = true

    } else {

      tools.setItem(to.fullPath, 1, 120000)

      to.meta.keepAlive = false;

    }

  }

  next()

})

渲染

  <keep-alive>

        <router-view v-if="$route.meta.keepAlive"></router-view>

      </keep-alive>

      <router-view v-if="!$route.meta.keepAlive"></router-view>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容