在微信小程序页面间传递数据

原文链接:https://www.jianshu.com/p/dae1bac5fc75

在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况,也遇到了开发过程微信小程序限制情况,特此做个总结。

  • 全局变量之中传递参数数据

    • 在微信小程序的开发过程之中,需要从A页面跳转到B页面,并且把A页面的数据传递到B页面使用。可以使用全局变量使用的方法,微信小程序官方提供app.js全局变量定义文件,里面可以定义需要在全局需要使用的变量与及变量值,例如用户登录之后,需要在所有页面中使用用户登录状态等。
    • 微信小程序初始化时,首先会加载app.json全局样式配置文件和全局变量文件,例如下面的globalData变量。
    • 在app.js定义全局变量后,可以在各页面间直接加载全局变量,小程序提供了getApp()方法,可以直接获取到App({...})这个全局实例对象。

  • App({
    
      /**
    * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
    */
    onLaunch: function () { }, /**
    * 当小程序启动,或从后台进入前台显示,会触发 onShow
    */
    onShow: function (options) { }, /**
    * 当小程序从前台进入后台,会触发 onHide
    */
    onHide: function () { }, /**
    * 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
    */
    onError: function (msg) { },
    //全局变量
    globalData:{
    userInfo:null
    } }) //page/index/index
    var app=getApp();//取得全局App({..})实例
    var userInfo=app.globalData.userInfo;//取得全局变量需要的值

    使用本地缓存的方法保存全局变量,本地缓存是有存储限制的,所以建议手动删除不再需要的缓存数据。

    • 假如在A页面保存需要的信息,如下图就可以直接保存键名为cargo的数据。
var cargo={
id:'12345',
count:2,
name:'xx书籍',
price:85,
picUrl:'http://image/kiwis.com/gfdscvbwerdcdgqd.jpg'
};
wx.setStorage({
key:"cargo",
data:cargo
})
  • 在B页面直接可以使用小程序的wx.getStorage并传入要获取到的键值名就可以获取本地缓存的数据。
wx.getStorage({
key: 'cargo',
success: function(res) {
console.log(res.data)
}
})
  • 通过在跳转、重定向等转变页面时候,可以直接通过url来传送数据。

    • 在A页面传递数据到B页面中使用的时候可以直接使用以下数据。
    //page A
    wx.navigateTo({
    url: 'test?id=1'
    })
    //or page A
    wx.redirectTo({
    url: 'test?id=1'
    })
    // or page A
    wx.reLaunch({
    url: 'test?id=1'
    })
    //page B
    Page({
    onLoad: function(option){
    console.log(option.query)
    }
    })
    • wx.navigateTo和wx.redirectTo不能跳转到tabar定义的页面,查看了微信小程序提供了wx.switchTab进行跳转,但是switchTab不可以传递url参数,后面提供了wx.reLaunch函数。
    • 往组件模板之中传递数据,可以直接在模板的data-*中传递数据。
    <template is="模板名" data="数据对象"/>
  • 通过页面栈获取到上一页面对数据进行修改
    • 假设从A页面跳转到B页面,而B页面需要对A页面的数据进行修改处理。
    //pageA
    page({
    data:{
    user:kiwis
    }
    })
    //pageB
    page({
    updateData:function(){
    var pages=getCurrentPages();
    var prevPage=pages[pages.length-2];
    prevPage.setData({
    user:'LaternKiwis'
    })
    }
    })
  • 对于全局变量的,也可以直接通过第三方服务器用数据库进行保存,是要使用的时候直接从数据库里面直接读取全局变量。
    • 使用wx.request提交与读取数据
    //提交数据给第三方服务器进行插入缓存数据库处理
    wx.request({
    url: 'test.php', //仅为示例,并非真实的接口地址
    data: {
    username:'kiwis',
    gender:1,
    picUrl:'http://image/kiwis.com/gfdscvbwerdcdgqd.jpg'
    },
    method:'POST',
    header: {
    'content-type': 'application/json'
    },
    success: function(res) {
    console.log(res.data)
    }
    })
    //从缓存数据库读取数据
    wx.request({
    url: 'test.php', //仅为示例,并非真实的接口地址
    data: {
    username:'kiwis'
    },
    method:'GET',
    header: {
    'content-type': 'application/json'
    },
    success: function(res) {
    console.log(res.data)
    }
    })
  • 在使用url进行参数传递时候,传递数据有字节限制;详情可以查阅微信小程序的文档;在使用url传参数数据时候,如果传送的参数值是一个json数据,要使用JSON.stringify对json对象转换成字符串的形式;在开发小程序过程中,使用Nodejs获取传递的参数时,没有经过字符串序列化,在后台获取不到参数值,显示为null。所以需要JSON.stringify,然后在后台逻辑之中使用JSON.parse序列化成对象使用。
  • 小程序通过wx.navaigaTo跳转到具体的页面,并传递相关联的参数数据过去案例如下,class为item的view绑定了tap事件,传递数据通过data-* 来定义(*是自定义的储存数据变量值,其中的item是真实数据)例如wxml页面如下所示:
    <view class="container">
    <view class="item" wx:for="{{items}}" data-video="{{item}}" bindtap="play">
    <image src="{{item.image_url}}" class="newsPic"></image>
    <view class="source">
    <text>{{item.source}}</text>
    <text class="count">评论 {{item.comments_count}}</text>
    </view>
    <view class="icon" >
    <text>{{item.title}}</text>
    <image src="../../images/{{path}}" class="play"></image>
    </view>
    </view>
    </view>
  • 在wx的js文件中,通过play事件通过下面的方式传递数据,通过event.currentTarget.dataset获取我们自定义的video变量:
      play:function(event){
    var video = event.currentTarget.dataset.video;
    console.log(video)
    // this.setData({
    // path:'play.png'
    // })
    wx.navigateTo({
    url: '../logs/logs?imgUrl=' + video.image_url + '&source_url=' + video["source_url"] + "&title=" + video.title + "&group_id=" + video["group_id"]
    })
    }
  • 在要接收上一页面传递过来的数据的页面通过onLoad事件的options参数里面包含了上一页面所有传递过来的参数数据,可以通过下面的方式进行获取。
      onLoad:function(options){
    var that=this
    that.setData({
    imgUrl:options.imgUrl,
    title:options.title,
    videoSrc:options.videoSrc,
    group_id:options["group_id"]
    })
    },

在微信小程序页面间传递数据总结的更多相关文章

  1. [转] 微信小程序页面间通信的5种方式

    微信小程序页面间通的5种方式 PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个 ...

  2. 微信小程序——页面之间传递值

    小程序页面传值的方式: 1.正向传值:上一页面 -->  下一页面 url传值 本地储存 全局的app对象 2.反向传值:下一页面 -->  上一页面 本地储存 全局的app对象 先说一下 ...

  3. 微信小程序函数间传递url的参数丢失问题

    可以使用encodeURIComponent():函数可把字符串作为 URI 组件进行编码. 可以使用decodeURIComponent():函数可把字符串作为 URI 组件进行解码.  

  4. 微信小程序--页面与组件之间如何进行信息传递和函数调用

    微信小程序--页面与组件之间如何进行信息传递和函数调用 ​ 这篇文章我会以我自己开发经验从如下几个角度来讲解相关的内容 页面如何向组件传数据 组件如何向页面传数据 页面如何调用组件内的函数 组件如何调 ...

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

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

  6. 微信小程序页面跳转方法总结

    微信小程序页面跳转目前有以下方法(不全面的欢迎补充): 1. 利用小程序提供的 API 跳转: // 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.// 注 ...

  7. StoryBoard学习(5):使用segue页面间传递数据

    StoryBoard学习(5):使用segue页面间传递数据 函数: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sen ...

  8. 微信小程序页面调用自定义组件内的事件

    微信小程序页面调用自定义组件内的事件 page page.json { "usingComponents": { "my-component": ". ...

  9. 微信小程序前台的用户数据入库(后台Laravel)

    首先 我们可以看到微信小程序官方 文档 wx.login   api-login.jpg 通过此图 我们知道 前台要传 一个 code给后台,后台拿到code 并结合appid和appsecret请求 ...

随机推荐

  1. Django TypeError: render() got an unexpected keyword argument 'renderer'

    场景: Xadmin添加plugin 来源: 1. xadmin与DjangoUeditor的安装 (第3.3章节) 2. 增加富文本编辑器Ueditor (第14.7章节) 报错: Django T ...

  2. python3 marshmallow学习

    python3 marshmallow学习 官方文档:https://marshmallow.readthedocs.io/en/stable/ 安装: pip install -U marshmal ...

  3. 如何快速找到Chrome配置文件路径,MAC 与window 都适用

    Chrome 的配置文件主要用于存储浏览器的相关配置.书签.扩展插件和密码等,Chrome 配置文件会存储在用户计算机的一个单独文件夹当中,当你升级或重装浏览器时,这些已有配置将可以被完整保存下来. ...

  4. Spring Cloud的常规组件和简单实战(一)

    最近一段时间在学习Spring Cloud,从Eureka到Hystrix,常用的配置和方法都有涉及一些,以此笔记来记录一下学习到的东西,也分享一下.内容以实战为起点,主要以介绍常规用法为主,最后也会 ...

  5. Vue事件修饰符,.capture关键字详解

    .prevent 用于阻止默认事件,点击a标签href可以打开相应的链接,那么给事件加    上此关键字,click.prevent .capture 冒泡顺序    例如 div1中嵌套div2中嵌 ...

  6. Node.js 中 exports 和 module.exports 的区别

    每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...

  7. 小程序mpvue怎么点击按钮获取button里面的值

    在小程序里面是没有dom元素的,这个我们只要会小程序的应该都知道,但是在平时开发中我们偶尔会遇到需要点击某个元素获取它的值的情况,在这里给大家列举了两种情况解决方法 方式一:数据绑定 这种情况的话,对 ...

  8. 虚拟机安装mysql踩坑记录

    本章节主要讲解的是在虚拟机centOs7版本以上安装mysql5.6版本,亲测可以直接使用,有需要帮助的小伙伴可以加本人QQ2246451792@qq.com!!!! 卸载centOs7自带的mari ...

  9. MyCat教程四:实现读写分离

    本文我们来给大家介绍下通过MyCat来实现MySQL的读写分离操作 MyCat读写分离 一.读写分离配置   前面我们已经介绍过了mysql的主从同步和mycat的安装及相关配置文件的介绍,现在我们来 ...

  10. 浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...