vue 路由前置守衛(wèi)+meta+localstorage設(shè)置有時(shí)間限制的緩存

工具函數(shù)

/**

?* 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,

? ? ? ? }

路由前置守衛(wèi)

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>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容