1、URL传值
这种方式最常用,比如:
wx.navigateTo({
url: '../detail/detail?cid='+cid+'&token='+token
})
这里面直接通过跳转页面的URL进行传值,然后在另一个页面进行接收:
onLoad: function (opt) {
console.log('cid =' + opt.cid);
console.log('access_token =' + opt.access_token);
}
传递字符串
var model = this.data.str;
wx.navigateTo({
url: '../detail/detail?model=' + model,
})
在下个页面的onload中获取,
onLoad: function (options) {
var bean = options.model;
console.log(options.model)
this.setData({
model:bean
})
}
传递对象
通过提供的JSON.stingify方法,将对象转换成字符串后传递
var model = JSON.stringify( model);
wx.navigateTo({
url: '../detail/detail?model=' + model,
})
//接收
onLoad: function (options) {
//将字符串转换成对象
var bean = JSON.parse(options.model);
}
注意,传递对象有时会出现错误Uncaught SyntaxError: Unexpected end of input
使用encodeURICompoent与decodeURIComponent来解决即可
//传递时
//encodeURICompoent JSON.stringify(model);
var model = JSON.stringify( model);
wx.navigateTo({
url: '../detail/detail?model=' + encodeURICompoent(JSON.stringify(model)),
})
//接收时
//JAON.parse(decodeURIComponent(model));
onLoad: function (options) {
var bean = JSON.parse(decodeURIComponent(options.model));
}
这种传值方式只适合值比较少的时候使用,传值比较多的时候,还是建议写本地缓存~
2、本地缓存
小程序API提供了本地缓存数据的API,默认可以缓存10M的数据,如下:
wx.setStorageSync('checkin', checkin);
checkin是一个object,在需要的页面直接调用wx.getStorageSync即可获取,这样就解决了传值较少的问题了。
3、全局APP
其实还有第三种方式,就是全局APP变量。app.js和app.wxss中的代码都是全局生效的,所以我们可以利用这一点儿,在不同页面之间进行传值。
//往globalData设置值
getApp().globalData.data = "12345";
//取globaData的值
var data = app.globalData.data;
App({
globalData: {
data:XXX
}
})
GlobalData可以随时在页面中读取和存储数据,比Storage方便很多。