结合自己在平时的开发中遇到的各种问题,和浏览各种问题的解决方案总结出一些自己在日常开发中常用的技巧和知点,希望各位不吝斧正。

1.短生命周期数据存储

以小程序启动到彻底关闭为周期的的数据建议存储在app.js文件夹中,引用app.js:

const app =getApp();

假设Value是在小程序本次生命周期中经常使用到的一个数据,比如说请求API的Token,动态的令牌等。那么就可以把这个值赋值到全局变量中去。实际上,并不是只有app.js中的globalData是全局变量,可以自己定义数据集。

App({
eduOS:{
token:''
},
...
})

对于app.js里面的token进行赋值操作很简单,只要页面引用了app.js

app.eduOS.token = Value;

这个数据在小程序的本次启动到彻底关闭后台的周期中就是长期存在的了,还可以根据需要进行修改,Value可以是对象。

2.长生命周期或者隐私数据存储

这种数据的显著特点是在小程序关闭再次重启后依然存在,或者涉及到用户的隐私信息但是需要复用,这种时候可以用本地缓存来解决这种问题。

本地缓存的生命周期: 小程序被开始使用 -----> 小程序被彻底从使用列表中移除。

小程序设置缓存的方式:

wx.setStorage({
key: 'educookie',
data: {
xh: that.data.xh,
pwd: that.data.pwd
}
})

小程序获取缓存的方式:

 var that = this;
wx.getStorage({
key: 'educookie',
success: function(res) {
that.setData({xh:res.data.xh,pwd:res.data.pwd});
},
})

比如保存用户的登陆态信息,但是不能保存用户的隐私数据,就可以采用这种方式。

或者是一个非时效性的数据,可以通过这种方式进行存储。

3.动态信息或配置信息存储

保存用户的配置信息,在更换手机时能迅速完成配置同步。

商家小程序推荐商品修改,或者是内容修正,或者是增加活动,不可能每次都要重写然后再次让小程序进行审核。

对此,可以在后端服务器中保存这个信息。

以一个小程序的轮播广告牌为例:

{
ad1:'imgurl1',
ad2:'imgurl2',
ad3:'imgurl3'
}

把这个数据存放在后台服务器,每一次刷新该页面都请求一次后台数据,对内容进行修改。

wx.request({
url:'XXX',
data:{},
success(res){
that.setData({
adList:res.data
})
}
})

类似这种方式,完成对一些数据的动态控制或者是云同步。

4.页面间数据传递

页面间之间的数据传递一般是简单的,这种类型的数据的生命周期是一次性的,用完即删。

wx.navigatorTo({
url:'../index/index?param1=value1&param2=value2'
})
//在index页面获取
onLoad(options){
console.log(options.param1);//value1
}

可以参照Http请求中的Get表单传参方式来写页面之间的传参。

如果需要传送的数据太多,可通过Map<key ,Storge>进行传递

wx.setStorge({
key:'xxx',
data:mydata
})

传递参数只需要传递一个key,在其他界面通过这个key再次去获取本地缓存,对于这种类型的数据,建议使用完后即时的删除缓存。

wx.removeStorage({
key: 'xxx',
success(res) {
console.log(res)
}
})

返回携带参数方法

wx.navigateBack({

})

共两种方式

*1. 全局变量 和 Storage *

const app = getApp();
page({
app.globalData.isBackvalue = ture;//确定是返回的值
app.globalData.tmpData = value;//你要传递的值,也可以设置缓存
})

在上一个页面获取

const app = getApp();
...
onShow(){
if(app.globalData.isBackValue){
this.setData({
XXX:app.globalData.tmpData
})
//或者是通过获取缓存的方法进行赋值
}
}

2. 页面栈

var allpages = getCurrentPages();//获取全部页面数据
//栈的下标从 0 开始,进入页面第一个加载的页面数据是 allpages[0],当前页面是allpages[allpages.length - 1], 上一个页面是allpages[allpages.length - 2]
var prepagedata = allpages[allpages.length - 2].data;//获取上一页面的数据。
var prepage = allpages[allpages.length - 2];//获取上一页面,包括数据和方法 //设置数据方法
prepage.setData({
XXX:value //XXX 是上个页面data中的参数,value是要设置的值
})
//调用函数方法,prepage中必须定义callfunction函数才可以调用
prepage.callfunction();

开发联系Q 1025584691

微信小程序开发技巧总结 (一)-- 数据传递和存储的更多相关文章

  1. 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载

    微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...

  2. 微信小程序开发技巧及填坑记录

    以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...

  3. 微信小程序:自定义组件的数据传递

    一.前言 如果小程序中有可复用的UI且具有一定的功能性,就可以使用自定义组件将其封装起来.下面介绍一个简单的组件和一个复杂的组件. 二.简单的组件(计数器) 1. 组件功能介绍 这个组件常见于外卖软件 ...

  4. 微信小程序开发3之保存数据及页面跳转

    第一  保存本地数据 1.异步保存本地数据 wx.setStorage({ key:keyStr, data:dataStr, success: function(e){}, fail: functi ...

  5. 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?

    原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复   ...

  6. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  7. [干货教程]仿网易云课堂微信小程序开发实战经验

    本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...

  8. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. 初尝微信小程序开发与实践

    这可能是一个java程序员最不务正业的一次分享了. 小程序的火热相信不用我多说了,年初的时候老婆去浦东某达面试,甚至都被问有没有小程序测试经验.俨然小程序成为了互联网公司自PC,WAP,安卓,IOS之 ...

随机推荐

  1. zTree 节点勾选取消勾选 选中取消选中

    zTreeObj.cancelSelectedNode function 举例 取消当前所有被选中节点的选中状态 var treeObj = $.fn.zTree.getZTreeObj(" ...

  2. cannot insert multiple commands into a prepared statement问题原因及解决办法

    问题是这样,我在对数据库进行写操作(添加.删除.修改)时,我想同时删除两个表中的两条关联数据,像这样 let sql = ` DELETE FROM bridge_parts WHERE id = $ ...

  3. Python基础————文件操作

    文件操作 4.1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') # 表示要干嘛 读 还是写 obj.write() #写什么内容 obj.read() ...

  4. mysql 自增

    auto_increment 在创建表的时候,可以设置id为自增 # 查看表现在的自增值 show create table blog \G; # 设置自增值的初始值 alter table blog ...

  5. javaweb-codereview 学习记录-2

    1.Java 文件名空字节截断漏洞(%00 Null Bytes) 受空字节截断影响的JDK版本范围:JDK<1.7.40 实际上修复就是检查文件名中是否包含\u0000,包含则为非法路径 fi ...

  6. 关于checkbox取值的问题

    今天,在做一个小界面的时候,要用到checkbox来判断用户是否选择记住密码. 本来我想这个不是挺简单吗,直接用jquery获取checkbox的checked属性值好了,如下: var rememb ...

  7. Redis(六):list/lpush/lrange/lpop 命令源码解析

    上一篇讲了hash数据类型的相关实现方法,没有茅塞顿开也至少知道redis如何搞事情的了吧. 本篇咱们继续来看redis中的数据类型的实现: list 相关操作实现. 同样,我们以使用者的角度,开始理 ...

  8. Rainbow Plan团队项目第一次作业——项目计划

    团队项目--Rainbow Plan英语学习App 1.团队简介 1.1团队名称:Rainbow Plan (彩虹计划) 1.2团队成员: 队员学号 队员姓名 201731024235 何继武(组长) ...

  9. Dynamics 365 CRM 在 Connected Field Service 中部署 IoT Central (二)- 匹配设备

    上个blog中介绍了我们怎么去部署IoT central和 connected field service做连接. 我们这次介绍怎么把IoT设备在CRM中怎么去注册. 首先我们打开devices,再选 ...

  10. 快速构建第三方api应用

    1.使用框架和扩展 详细请看composer.json "php": "^7.1.3", "laravel-admin-ext/config" ...