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

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

  • 全局变量之中传递参数数据
    • 在微信小程序的开发过程之中,需要从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"]
      })
    },
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容