微信小程序中的数据存储实现方式
全局变量globaldata
在最初创建小程序时,app.js文件中app方法中传入的对象里面默认添加了globaldata参数。在所有的页面中我们都可以通过getapp方法获取到这个app方法传入的对象,进而拿到其中的globaldata。
const app = getapp(); const openid = app.globaldata.openid; app.globaldata.openid = 1; delete app.globaldata.openid;
globaldata的值是一个对象,我们可以用对待对象的方式一样调用它。(globaldata并非一定叫这个名字)
页面私有变量 data
每个页面的js逻辑层页面都是在page方法中传入了一个对象。其中data的值一般用来存储当前页面内的变量值。其主要用途是通过setdata接口和视图层进行数据交互,从而改变wxml视图层显示内容。
如果不需要将data中的值传入到视图层中,不建议使用setdata而是改用对象方式操作。可以有效节省性能。
在页面初始化时,data中的数据都会和视图层进行数据交互。如果进一步处理,我们还可以在对象中添加localdata专门存储当前页面所需变量
page({ data: { openid: 123 }, localdata: { timestamp: date.now() } }) this.setdata({ openid: 321 }) this.data.openid = 321; this.localdata.timestamp = data.now();
storage
storage也是小程序中很常用的一种存储方式,和全局变量globaldata类似。不局限于某个页面,任何位置都可以通过wx提供的接口获取到其中的值。
优点是:可以长期存储,即使退出重新登陆数据不会消失。(上限存储10m)
缺点是:异步行为,每次存取耗时相对较长。
wx提供了增、删、改、查接口(增、改都是一个set接口),下面只举一个存储数据例子:
异步存储(根据设备性能的不同,你还真不知道他会存多久)
wx.setstorage({ key: 'key', data: 'value', success: res => { ... } }) // 支持promise wx.setstorage({key: 'key', data: 'value'}) .then(res => { ... })
同步存储(会造成阻塞~)
wx.setstoragesync('key', 'value') ...
文件存储 filesystemanager
filesystemanager(下简称fs)可以把文字、图片类型的数据通过文件的方式存储到本地。存储上限10m(之前记得200m,后来翻文档看到的都是10了),长期存储,不删除小程序数据就不会消失。
写入:
const fs = wx.getfilesystemmanager(); fs.writefile({ filepath: `${wx.env.user_data_path}/_l${filename}.txt`, data: json.stringify(data), encoding: 'utf8', success(res) { ... } })
- filepath中的 env.userdatapath 是wx分配给当前程序的默认空间,coder可以在其下创建文件夹,添加文件等。
- filename是存储数据时的文件名。
- data是要存储的数据,可以是图片。
- encoding:编码格式,当data为图片时可已调整为二进制。
读取
存取数据时要牢记文件名和存储位置;
fs.readfile({ filepath: `${wx.env.user_data_path}/_l${filename}.txt`, encoding: 'utf8', position: 0, success(res) { json.parse(res.data) } })
移除
fs.unlink({ filepath: `${wx.env.user_data_path}/_l${filename}.txt`, encoding: 'utf8', success(res) { ... } })
fs的操作都是异步行为,要注意处理逻辑。
到此这篇关于微信小程序中的数据存储实现方式的文章就介绍到这了,更多相关小程序数据存储内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!