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

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. P2871 [USACO07DEC]手链Charm Bracelet(01背包模板)

    题目传送门:P2871 [USACO07DEC]手链Charm Bracelet 题目描述 Bessie has gone to the mall's jewelry store and spies ...

  2. dfs序 + 树状数组

    You are given a tree, it’s root is p, and the node is numbered from 1 to n. Now define f(i) as the n ...

  3. sql server 新建用户 18456

    麻辣各级,今天阴沟里翻船 了,自己在家创建sqlserver新的用户名,一直报错  18456 邮件添加用户名这一套下来是没错. 重要是这样===>要重新启动一下sql server,就ok了. ...

  4. 256位AES加密和解密

    /// <summary> /// 256位AES加密 /// </summary> /// <param name="toEncrypt">& ...

  5. 初入python,与同学者的第一次见面(小激动)

    自2017来,接触python其实已经算是蛮久了,最苦的时光还是刚开始的时候,真的,我感觉编程就是一种感觉,有的时候就像找对象一样,感觉对了,怎么学都是带劲哈哈哈.在这个周围都在学习PHP的环境下,我 ...

  6. SpringMvc简单使用

    SpringMvc框架的简单使用 第一步:导入依赖 <dependencies> <dependency> <groupId>org.springframework ...

  7. 玩转Django2.0---Django笔记建站基础四(视图)

    第四章 视图 4.1 探究视图 一.视图说明 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求和生成相应的相应部分,然后在页面或其它类型文档中显示.也可以理解为视图是MVC ...

  8. dotnet restore 初次运行 这个 指令 会安装 特别多的 4.0.0 或者 4.1 的 rc2-24027的 东东 这些东西。

  9. SpringBoot配置嵌入式Servlet容器

    1).如何定制和修改Servlet容器的相关配置: 1.修改和server有关的配置(ServerProperties[也是EmbeddedServletContainerCustomizer]): ...

  10. python中的dumps和loads区别

    一.概念理解 json是一种轻量级的数据交换格式,对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:{"name":"cct ...