盤點微信小程式跨頁面傳值的若干方式
直接給大家上乾貨
1、跳轉頁面傳遞參數
pageA.wxml
<button type="primary" bindtap="jumpTo">點擊跳轉</button>
pageA.js
jumpTo:function(){
//傳數字
let number=0
//傳字元串
let str="字元串"
//傳json對象
let json={
name:'小王',
age:18
}
//傳json數組
let jsonArray=[{
name:'小趙',
age:20
},{
name:'小李',
age:18
}]
/**
* url傳值只能傳字元串或數字,不能直接傳json對象
* 所以要把json,jsonArray轉化為字元串傳值
* 當然到另一個介面要把字元串還原成json,jsonArray對象
*/
let jsonstr=JSON.stringify(json)
let jsonArraystr=JSON.stringify(jsonArray)
//skipurl換成你要跳轉的url
//ex: ../page2/page2
wx.navigateTo({
url: 'skipurl?number='+number+'&str='+str+'&json='+jsonstr+'&jsonArray='+jsonArraystr,
})
},
pageB.js
onLoad: function (options) {
//接收number
let number = options.number
//接收str
let str = options.str
//接收json字元串,並將json字元串還原json
let json=JSON.parse(options.json)
//接收jsonArray字元串,並將jsonArray字元串還原jsonArray
let jsonArray=JSON.parse(options.jsonArray)
//列印接收到的數據
console.warn("傳輸數據成功!!")
console.log(number)
console.log(str)
console.log(json)
console.log(jsonArray)
},
2、快取
pageA.js 寫入
let obj={ name:'小明', age:3 }
wx.setStorage({ data: obj, key: 'test', })
pageB.js 讀取
wx.getStorage({
key: 'test',
}).then(res=>{
console.log('獲取快取成功')
console.log(res.data)
})
3、全局的globalData對象
// 全局app.js
globalData: { id: 1 }
// xxxa頁面
var app = getApp();
app.globalData.id = 18
// xxxb頁面
var app = getApp();
console.log(app.globalData.id) // 18
4、eventChannel發布訂閱
index.wxml
<button bindtap="jump">jump to next page</button>
index.js
Page({
jump: function () {
wx.navigateTo({
url: "./test",
events: {
// 監聽methodsFromTest事件,並獲取傳遞來的數據
methodsFromTest: function (data) {
console.log("index頁面接收數據:", data);
},
},
success: function (res) {
// 通過res.eventChannel觸發methodsFromIndex事件並傳遞出去數據
res.eventChannel.emit("methodsFromIndex", {
data: "send from opener page to test",
});
},
});
},
});
test.js
Page({
onLoad: function (option) {
console.log("test page onLoad");
// 通過this.getOpenerEventChannel()實例對象可以主動觸發或監聽事件
const eventChannel = this.getOpenerEventChannel();
eventChannel.emit("methodsFromTest", {
data: "send from opened page to index",
});
eventChannel.on("methodsFromIndex", function (data) {
console.log("test頁面接收數據:", data);
});
},
});
效果如下