uniapp支持使用unisetStorageSync()来存储多个key,该方法会将多个key和value存储到本地缓存中,并且可以通过unigetStorageSync()来获取指定key的value。此外,还可以使用uniremoveStorageSync()来删除指定key的value。
多次拒绝登录和允许登录
微信小程序的登录获取用户信息,是通过微信d出窗口,用户可点击允许 和拒绝两个按钮,点击允许,则获取用户信息登录成功,若点击拒绝,则获取失败,可通过二次请求调用d起获取用户信息窗口。
具体代码如下:
//appjs
App({
onLaunch: function () {
//调用API从本地缓存中获取数据
var logs = wxgetStorageSync('logs') || [];
logsunshift(Datenow());
wxsetStorageSync('logs', logs);
consolelog('logs',logs);
},
getUserInfo:function(cb){
var that = this;
//调用登录接口
function getOpenid(backMsg){
thatglobalDatauserInfo = backMsguserInfo;
thatglobalDataencryptedData = backMsgencryptedData;
thatglobalDataiv = backMsgiv;
thatglobalDatalogin = true;
consolelog(thatglobalDatacode);
wxrequest({
url:thatlocalUrl+'Login/sendCodeLogin',
data:{
code:thatglobalDatacode,
encryptedData: backMsgencryptedData,
iv:backMsgiv
},
success:function(openData){
consolelog('返回openid',openData,openDatadata);
if(openDatadatacode==1001){
thatglobalDataopenid = openDatadatadataopenid;
wxsetStorageSync('openid',thatglobalDataopenid);
wxsetStorageSync('userInfo',thatglobalDatauserInfo);
wxsetStorageSync('isManager', openDatadatadataisManager);
wxshowToast({
title: '登录成功',
icon: 'success',
duration: 500
});
typeof cb == "function" && cb(thatglobalDatauserInfo);
}else{
wxshowLoading({
title: '登录失败'
});
setTimeout(function () {
wxhideLoading();
}, 500)
}
}
})
}
wxlogin({
success: function (msg) {
consolelog('code',msg);
if(msgcode){
thatglobalDatacode = msgcode;
if(thatglobalDatalogin==false){
wxopenSetting({
success: function (data) {
if(data) {
if (dataauthSetting["scopeuserInfo"] == true) {
//loginStatus = true;
wxgetUserInfo({
withCredentials: false,
success: function (res) {
consolelog('第二次成功',res);
getOpenid(res);
},
fail: function (res) {
thatglobalDatalogin = false;
consolelog('二次失败',res);
}
});
}else{
thatglobalDatalogin = false;
consolelog('二次失败02');
}
}
},
fail: function () {
consoleinfo("设置失败返回数据");
}
});
}else{
wxgetUserInfo({
success: function (res) {
consolelog('第一次成功',res);
getOpenid(res);
},fail:function(msg){
thatglobalDatalogin = false;
consolelog('第一次失败',msg);
}
})
}
}
},
fail:function(res){
consolelog(res);
}
})
},
globalData:{
userInfo:null,
encryptedData:null,
iv:null,
openid:null,
code:null
}
});
这个问题遇到多次了,很多人单看这句话提示,会去检查自己的微信版本,其实这个跟微信版本没有关系,这是微信小程序的基础库版本过高造成的。
去小程序的开发后台设置这里更改一下版本库到2212, 亲测这个版本pc是可以打开微信小程序的。
但是这里会有一个bug,就是,微信最近不是回收了这个权限吗, wxgetUserProfile({
desc: “获取你的昵称、头像、地区及性别”,
success: res => {}})
就是微信后台不会再给我们返回用户头像 昵称了。 改造了一下,让用户主动触发去上传头像,昵称。
<button open-type="chooseAvatar" bindchooseavatar="onChooseAvatar" style="width: 200rpx;padding: 0;margin: 0 auto;">
1
1
点击,可更改 点击更新 onChooseAvatar(e) { consolelog(e) const { avatarUrl } = edetail wxgetFileSystemManager()readFile({ filePath: edetailavatarUrl , //选择返回的相对路径 encoding: 'base64', //编码格式 success: res => { //成功的回调 // consolelog('data:image/png;base64,' + resdata) thissetData({ base64img:'data:image/png;base64,' + resdata }) } }) thissetData({ avatarUrl, }) wxsetStorageSync('img', edetailavatarUrl ) }, handleusername(e){ consolelog(e) thissetData({ username: edetailvalue }) wxsetStorageSync('username', edetailvalue ) },
这有涉及到另一个问题,因为 open-type=“chooseAvatar” pc端也有最低版本库要求,2245,(当初这里还折磨了我很久,我当时用的版本库是2212,手机能获取头像,但是pc死活不能,后来在社区交流发现是版本库的设置问题。 所以记录一下走过的坑吧~~)
这就很尴尬了,我为了获取头像,那么我得升级版本库。但是为了pc端能打开小程序,我又得降级版本库。。。 那么取其一,还是降级为2212了。 小程序获取头像在真机上获取吧。
首先uni-app提供的数据缓存Storage分四种模式:
一种是set(用于存储数据)、一种是get(用于获取数据)、一种是remove
(用于移除指定数据)、最后一种是clear(清除缓存数据)
然后区分:带Sync字段是同步的,没有带的是异步。
查看缓存数据的界面面板:
谷歌浏览器--开发者工具--Application--Storage--Local Storage
上面这个面板就是进行查看数据缓存相关信息的。
下面进行异步数据缓存展示,就是没带Sync字段的,顺序:先有set模式-->get模式-->remove模式-->clear模式(一般很少用)
首先准备三个按钮,分别对应上面的三个功能: 存储数据、获取数据、移除数据
方法定义:
功能实现:
(1)存储数据
unisetStorage(OBJECT)
这个对象里面传入一个key和一个data,你可以理解为键值对的形式,然后一个回调函数success
当我们点击“存储数据”的这个按钮时,我们来到面板就会看到数据已经缓存成功呈现在面板上。而key为键,data为值。
(2)获取数据
unigetStorage() 用于获取缓存的数据
这里的key对应setStorage的key,然后再success回调函数里面接受res返回数据的结果,控制台输出。
(3)移除数据
一般用于移除整个数据。
回到数据缓存的面板查看,发现key为"student"的字段已经完整移除。
带Sync的,不需要指定特定的键(key)和值(data)。
以setStorageSync(key,value)为例子,同步可以直接接受参数,第一个参时就是key键,第二个参数为value值。
将上面的例子改成同步,效果是一样的。
数据缓存:
获取数据:
1两个普通页面之间的跳转用uninavgateTo(),url可携带参数。
2普通页面跳tabbar配置过的页面需要uniswitchTab(),url不能传值。
3unireLaunch()万金油跳转,可以跳转任何页面(克服了普通页面跳tabbar配置的页面url不能传值的问题。)
4突出中间按钮的midButton,是偶数才能显示,但只支持真机环境,浏览器是没有效果的。
6页面生命周期(考虑的是页面刷新带来的影响):
onLoad、onShow、onReady
应用生命周期,指appvue里面的这三个
7箭头函数没有this指向(慎用),如果在控制台打印this是undefined的,证明是箭头函数在作怪,在特殊场合别贪方便,有时候会遇到抓破头皮也找不到问题所在,就是箭头函数搞的鬼。
8unirequest({,success:function(res){})})请求成功返回的数据直接使用this直接赋值是不生效的,因为这是一个异步函数,需要借助一个指向:let that = this
9setStorageSync 数据缓存是用来2个页面交互的,传数据传值,写在onLoad里面。
10uni-app的<view>标签等于div标签,独占一行。
5和风天气官网提供的API是免费的,每人一天1000次数,够练手了。
以上就是关于uniapp如何存储多个key全部的内容,包括:uniapp如何存储多个key、微信小程序怎么拒绝快速登录、微信小程序突然版本就变了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)