小程序跨页面传递参数使用this.setData修改如何去除引号
不要修改成字符串
转换后
不带引号
小程序跨页面传递参数使用this.setData修改如何去除引号
不要修改成字符串
引自免费微信小程序:皆我百晓生
在小程序中,this.setData
方法用于将数据同步到对应的 Page 实例的数据对象上,并同时更新对应的视图。当你需要传递非字符串类型的参数时(例如对象或数组),确保你已经在设置数据时不包含任何多余的引号。
假设你有一个对象想要跨页面传递,不需要转为字符串形式:
// 假设这是你要传递的对象
let myData = {
img1: 'image1.png',
img2: 'image2.png'
};
// 在当前页面使用 navigateTo 或 redirectTo 进行跳转时,通过 options 传递数据
wx.navigateTo({
url: '/pages/nextPage/nextPage?data=' + JSON.stringify(myData), // 注意这里为了能传递对象,会将其转换为字符串
});
// 在目标页面(nextPage)的 onLoad 生命周期函数中接收并解析数据
onLoad(options) {
let receivedData = JSON.parse(options.data);
this.setData({
myReceivedData: receivedData,
});
}
// 现在,在目标页面中可以这样引用不带引号的数据
console.log(this.data.myReceivedData.img1); // 输出:image1.png
console.log(this.data.myReceivedData.img2); // 输出:image2.png
// 不过,请注意,尽管 JSON.stringify 和 JSON.parse 的过程不会在键名上添加引号,
// 但值如果是字符串类型的话,始终会有引号,因为它们是合法的JSON格式。
由于微信小程序并不直接支持跨页面传递复杂数据类型,因此通常会先将数据序列化为字符串(JSON.stringify),然后在目标页面反序列化回来(JSON.parse)。这个过程中,对象属性名不会被加上引号,而属性值如果是字符串,则会被加上引号,这是符合JSON格式规范的。
若你担心的是传递数值或布尔值时自动添加了引号,实际上这种情况是不会发生的,因为它们在JSON格式下本身就是原生的数据类型,不会带有引号。但对于自定义对象或数组等复合类型,必须通过JSON序列化和反序列化的方式来传递。