前言

  在开发程序过程中,会遇到各种各样的传值的情景,例如:页面之间的传值、回调、代理、通知等。而在微信小程序中,传值的方式和Android和iOS的方式有一定的异同。

微信小程序使用的数据传值方式有有以下几种方式:

  • 页面之间传值
  • 全局对象
  • 本地存储

一、页面之间传值

小程序页面之间传值可以设定:

  • 父页面(当前页面):A页面
  • 子页面(跳转的新页面):B页面

页面之间跳转URL参数传递可以参考博客:https://blog.csdn.net/Future_One/article/details/104009297

1.页面跳转传值(正向传值)

用WXML模板控件navigator 或者 JS逻辑事件(wx.navigateTo、wx.redirectTo、wx.reLaunch)传值,A页面传值给B页面。

  • url连接后用?分开,参数名A=value(pageA?参数名A=value)
  • 多个参数:参数之间用&分割:pageA?参数名A=value&参数名B=value

A页面 传值的方式如下几种方式:


// 方法一:navigator标签传值<navigator url="/page/index/Emba?id=1" >传值</navigator><navigator url="/page/index/Emba?id=1&user=wds" >传值</navigator>// 方法二: wx.navigateTo传值:单值、多值传递
//wx.navigateTo({url: '/page/index/Emba?id=' + id})wx.navigateTo({url: '/page/index/Emba?id=' + id +'&user='+ user})// redirectTo 传值:单值、多值传递wx.redirectTo({url: '/page/index/Emba?id=' + id})wx.redirectTo({url: '/page/index/Emba?id=' + id +'&user='+ user})// reLaunch 传值:单值、多值传递wx.reLaunch({url: '/page/index/Emba?id=' + id})wx.reLaunch({url: '/page/index/Emba?id=' + id +'&user='+ user})

注:字符串采用 “+” 号进行拼接

B页面接收方式:

 /*** 生命周期函数--监听页面加载*/onLoad: function (options) {var id = options.id;var user = options.user;this.setData({id:id,user:user})},

2.反向传值:B页面—>A页面

页面反向传具体代码如下:

 var pages = getCurrentPages()   // 获取栈中全部界面的, 然后把数据写入相应界面var currentPage = pages[pages.length - 1]   // 当前页面Bvar prePage = pages[pages.length - 2]       // 上一个页面Avar password = this.data.passwordprePage.setData({password:password,})wx.navigateBack({delta:1})

注意:返回到上一页A,A页面的onLoad、onReady等方法都不会重新加载,只有onShow方法才会重新加载,所有在反向传值是注意小程序页面的生命周期。接收页面B的数据处理代码如下:

/*** 生命周期函数--监听页面显示*/onShow: function () {//获取数据 this.gainData() // 打印你的传值console.log("res==", this.data.res)},

二、全局对象(App对象)

微信小程序的宿主环境提供了App()构造器来注册一个程序App,在项目根目录下的app.js中可以看到App()对象。而App实例是单例对象,在其他JS脚本文件中,可以使用宿主环境提供的getApp()来获取程序实例对象,同时也可以实现全局数据传值。

首先我们配置的数据默认属性是:appData,接下来都会用appData来存储数据

  1. app.js文件直接配置数据
//用户数据appData: {user_info: "Hello World",}
  1. 在其他JS中对全局变量赋值或者使用新的属性,使用全局变量 代码如下:
// 赋值var app = getApp();app.appData.user_info = "你好!";// 使用新的属性赋值app.appData.setData({username: "三哥"});// 使用全局变量 赋值给页面的user_info属性var app = getApp();var user_info = app.appData.user_info;this.setData({user_info: user_info.user_info});

全局变量的使用,可以在不同页面对App单例对象进行数据的写入,读取,实现页面之间的传值。

三、本地储存

tips:本地数据存储的大小限制为 10MB
每个微信小程序都可能用到本地缓存数据,这里我们可以通过调用微信提供的方法同步、异步的API方法实现对数据本地缓存、获取、清除。

同步存储:

  • wx.setStorageSync (存储)
  • wx.getStorageSync (读取)
  • wx.clearStorageSync (删除)

异步存储:

  • wx.setStorage (存储)
  • wx.getStorage (读取)
  • wx.clearStorage (删除)

接下来举例其中一种方式:同步存储,另一种方式类同。

// 存储到本地
wx.setStorageSync('user_info', dic);//读取存储的数据
var user_info = wx.getStorageSync("user_info")//从本地缓存中同步移除指定 key。这里具体使用同步或是异步需要根据你存储时的方法,或是同步清理本地数据缓存wx.clearStorageSync()wx.removeStorageSync("user_info")

同步和异步存储根据具体场景采用不同的方案。

持续更新中……

微信小程序系列4——传值详解相关推荐

  1. php小程序onload,微信小程序 loading 组件实例详解

    这篇文章主要介绍了微信小程序 loading 组件实例详解的相关资料,需要的朋友可以参考下 loading通常使用在请求网络数据时的一种方式,通过hidden属性设置显示与否 主要属性: wxml 显 ...

  2. 微信小程序按钮Button使用详解

    最近在出微信小程序系列教程 顺手写了点博客 欢迎大家关注 button 用来实现按钮点击效果,本文章效果如下: 1 wxml 文件中 在这里我就放了三个普通的按钮 <view class=&qu ...

  3. 微信小程序02【配置详解、生命周期-app对象使用、页面跳转详解】

    学习地址:https://www.bilibili.com/video/BV1sx411z77P 笔记01:https://blog.csdn.net/weixin_44949135/article/ ...

  4. 微信小程序框架(二)-全面详解(学习总结---从入门到深化)

    目录 组件_基础视图 容器 view 文本 text 图片 image 组件_滑块视图容器 基本实现 Swiper常用属性说明 组件_滚动视图区域 水平滚动 垂直滚动 常用属性 组件_icon 图标使 ...

  5. 微信小程序框架(四)-全面详解(学习总结---从入门到深化)

    目录 路由_navigateTo 页面跳转 携带参数 返回上一级页面 路由_redirectTo 页面跳转 路由_reLaunch 页面跳转 路由_switchTab 实现 tabbar 页面跳转 交 ...

  6. 新手微信小程序制作教程步骤详解!

    制作微信小程序方法: 1.在微信公众平台上申请一个小程序账号,申请完成之后需要进行微信认证,并且需要缴纳300元的认证费用.如果不缴纳300元的费用,微信小程序商城没有开通支付功能. 2.新建一个空白 ...

  7. 微信小程序 this和that详解及简单实例

    微信小程序中,在wx.request({});方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报 ...

  8. 微信小程序html5音频,微信小程序 audio音频播放详解及实例

    loop:是否循环播放 id:标注唯一组件以this.audioCtx = wx.createAudioContext('myAudio')获取控制组件的对象. bindplay:播放时触发该事件 b ...

  9. 微信小程序(三)详解篇

    一.什么是小程序(了解) 小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下即可打开应用.也体现了"用完即走"的理念 ...

最新文章

  1. 强类型语言和静态类型语言有什么区别?
  2. java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
  3. pt100 c 语言,PT100计算公式 C程序.doc
  4. 生产环境JVM内存大小配置
  5. 关于 adb shell error: no devices/emulators found 的解决方案
  6. GUI阅读字号和触点面积设计 (可用性设计)
  7. 图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化
  8. 百度陆奇:AI是5G网络下最好的加速器,技术商业化还要更快
  9. SIP Servlet开发环境配置
  10. 苹果手机signin_苹果iphone弹出sign in to itunes store怎么办
  11. BERT源码embedding_lookup解析
  12. 【读书笔记】重新定义团队
  13. Mex HDU - 4747(递推, 思维)
  14. Winform之网易音乐、百度音乐、QQ音乐付费音乐免费下载
  15. Python的学习笔记案例8--空气质量指数计算1.0
  16. 全球及中国汽车自动驾驶用胶粘剂行业市场发展态势与需求前景预测报告2022-2028年
  17. ITK入门教程(13)点集之得到点中的存储数据
  18. 【项目实战】IPC摄像头在线状态ping检测与告警邮件发送项目总结
  19. 03矩阵的乘法与逆矩阵
  20. 基于STM32开发板I²C总线通信协议浅析

热门文章

  1. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + 串口输出
  2. QUIC 技术创新 让视频和图片分发再提速
  3. 曾经排名第一的安全软件,为啥会变成流氓软件?
  4. Linux环境下ARM开发工具TrueSTUDIO初体验
  5. 人工智能轨道交通行业周刊-第12期(2022.8.29-9.4)
  6. 美国鲨鱼主机使用笔记
  7. 计算机专业教学总结,计算机教研组教学工作总结
  8. 考虑退化成本的混合储能微电网双层能量管理系统(复现) 提出了一种新型的包含混合ESS的两层微电网EMS。 电力调度的目标是上层的运行成本最小
  9. Hololens2开机无法启动无法开机问题
  10. 如何写一个Vue自定义指令