uniapp如何存储多个key

uniapp如何存储多个key,第1张

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、微信小程序怎么拒绝快速登录、微信小程序突然版本就变了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10072846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存