在开发微信小程序过程之中,遇到这么一些须要在微信小程序页面之间进行数据的传递的状况,也遇到了开发过程微信小程序限制状况,特此作个总结。php
app.js
全局变量定义文件,里面能够定义须要在全局须要使用的变量与及变量值,例如用户登陆以后,须要在全部页面中使用用户登陆状态等。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;//取得全局变量须要的值
复制代码
var cargo={
id:'12345',
count:2,
name:'xx书籍',
price:85,
picUrl:'http://image/kiwis.com/gfdscvbwerdcdgqd.jpg'
};
wx.setStorage({
key:"cargo",
data:cargo
})
复制代码
wx.getStorage
并传入要获取到的键值名就能够获取本地缓存的数据。wx.getStorage({
key: 'cargo',
success: function(res) {
console.log(res.data)
}
})
复制代码
//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="数据对象"/>
复制代码
//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)
}
})
复制代码
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>
复制代码
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"]
})
},
复制代码