若用混乱的心看待世界,世界就会变成乱码很多人总想改变世界,从没想过改变自己

原因
小程序数据来自本地json,点击文章列表之后需要给传输多个参数给文章详情页
title: "小程序样子描述",
date: "2020年10月03日",
cover: "https://cdn.frbkw.com/wp-center/uploads/2022/03/1646562812-20200306.jpg",
model: "IOS",
wechat: "8.0.22",
essay: "https://banner.frbkw.com",
images: [
{img: "https://cdn.frbkw.com/wp-center/uploads/2022/04/1650462139-202201202131.jpg"},
{img: "https://cdn.frbkw.com/wp-center/uploads/2022/04/1651050995-202204271717.jpg"}
]
思路
实现目的的效果有很多种,例如最简单的首页文章列表点击传输index索引值。文章界面再次请求json数据找到对应的index索引,但这不是一个有效的方式
直接使用页面路由在url中添加对应的参数
// 列表点击
listsTap(e){
console.log(e.currentTarget.dataset.info,'文章点击数据')
wx.navigateTo({
url: '../details/details?info=' + e.currentTarget.dataset.info,
})
}
但是文章详情打开接收数据则显示object

如何传输
1.EventChannel通讯
EventChannel.emit(string eventName, any args)
我们需要给EventChannel添加2个参数,第一个是通讯名称可以随意,第二个是传输的数据
// 列表点击
listsTap(e){
console.log(e.currentTarget.dataset.info,'文章点击数据')
wx.navigateTo({
url: '../details/details',
success: function(res) {
// 通过 eventChannel 向被打开页面传送数据
res.eventChannel.emit('yinfengrui', { data: e.currentTarget.dataset.info })
}
})
}
文章详情页先获取事件对象即可得到数据
onLoad(options) {
console.log(options)
// 接收eventChannel通讯数据
this.acceptData();
},
acceptData() {
//获取事件对象
const eventChannel = this.getOpenerEventChannel()
eventChannel.on('yinfengrui', (res)=> {
console.log(res.data, '列表传输数据')
this.setData({
details:res.data
})
})
}
该方式会有一个问题,在使用编译模式下EventChannel通讯他不算启动参数,没有办法单独编译文章详情页面调试(报错:EventChannel函数)


2.JSON数据解析
首页使用JSON.stringify序列化成 一个JSON 字符串的值
// 列表点击
listsTap(e){
console.log(e.currentTarget.dataset.info,'文章点击数据')
var jsondata = JSON.stringify(e.currentTarget.dataset.info)
wx.navigateTo({
url: '../details/details?info=' + jsondata
})
}
文章详情页面JSON.parse格式字符串转换为js对象
onLoad(options) {
var datas = JSON.parse(options.info)
console.log(datas)
},
这样操作在小程序编译模式下会有启动参数,因为转义符的情况下也不是很友好
总结
学习成长+1
头发数量-0
感悟
EventChannel通讯是学习的一个小知识点,只有不断学习才能在生活中发现阳光的灼热