站三界导航
首页 uniapp代码Uniapp添加全局方法,二次封装缓存

Uniapp添加全局方法,二次封装缓存

  • uniapp代码
  • 来源:站三界导航
  • 83阅读
  • 2023-03-30

在项目开发中,没有使用Vuex进行全局缓存,而是使用uniapp自带的类似于js的storage来进行跨页面数据共享。因而在使用时,会出现很多相同的代码去操作缓存数据。故而全局方法可以帮忙减少代码量,让代码看起来更加简洁。

1.uniapp添加全局方法和变量

在main.js进行挂载。
例如挂载全局请求的url。

Vue.prototype.apiUrl = "http://api.***.cn";

在其他vue文件里面进行使用时,直接this即可。

let url = this.apiUrl

全局方法的挂载
现在main.js里面声明一个变量,值为一个函数。

const setCache = (key, value, seconds) => {
	console.log("setCache")
};

然后使用Vue.prototype.变量的形式将方法挂载上去,如下。

Vue.prototype.$Cache = {
	setCache
};

这样setCache方法就被挂载在一个全局变量$Cache上,在使用时直接调用就行了。声明全局变量时,一般会用$符号开头

console.log(this.$Cache.setCache("lll","111",100));

2.二次封装uniapp的缓存方法

uniapp的异步缓存

uni.setStorage({
    key: 'storage_key',
    data: 'hello',
    success: function () {
        console.log('success');
    }
});

uniapp的异步获取缓存

try {
    const value = uni.getStorageSync('storage_key');
    if (value) {
        console.log(value);
    }
} catch (e) {
    // error
}

代码量虽然不多,但是当使用的次数多了之后你仍然会发现这些代码很冗余,就很难受。不过uniapp处理得比较好的是,缓存时key为字符串,而值可以为一个json对象,或者Boolean值,这样就很嗨皮了呀。反正我做缓存就只会使用这两种类型,别问我为什么。

接着封装一下咯

设置缓存的同步封装:这里我们加上了缓存时间,uniapp默认缓存有效时间为28天。但是日常使用中,我觉得太长了。所以改为支撑自定义。
怎么改,uniapp没有封装这个方法呀。于是缓存一次的,变为了缓存两次。一次存数据,一次存时间。就像下面这这样,看不懂的可以留言。

const setCache = (key, value, seconds) => {
	try {
		if (key && value) {
			console.log(value);
			uni.setStorageSync(key, value);
		}
		if (seconds) {
			let expire = new Date().getTime() + parseInt(seconds);
			uni.setStorageSync(key + 'expire', expire);
		}
		console.log('设置缓存成功:'+key);
	} catch (e) {
		console.log('设置缓存失败:' + e.message);
	}
};

判断缓存是否过期:这份代码,结合着上面的代码看效果会更加。

const isCacheAlive = (key) => {
	try {
		const expireTime = uni.getStorageSync(key + 'expire');
		const nowTime = new Date().getTime();
		if (expireTime < nowTime) {
			return true;
		} else {
			return false;
		}
	} catch (e) {
		console.log('判断缓存是否过期出错:' + e.message);
	}
};

就贴这两段代码得了,其他的那些封装都很简单,没啥好说的。

当然vue支持很多全局挂载的方法,但是我在uniapp项目中测试的时候只有上面这种方法生效。不知道有没有大佬指条明路,在main.js写公共的方法,代码量多了我很难受呀。

本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/40390.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。