使用navigateTo()这种方法传对象,在跳转到的页面内打印传递参数,会发现得到的数据并不是想要的。如:
1、跳转
// 详情
myInInfoClick(obj) {
// this.dataItem = obj;
uni.navigateTo({
url: './components/addIn?dataItem='+obj
});
},
2、获取
// onLoad 表示监听页面加载,其参数为上个页面传递的数据
onLoad(option) {
console.log(option);
}
3、打印
4、原因
url传参时,不转换数据且当参数带有特殊字符的时候,会被截取数据,从而导致数据不完整。因此,想要解决这个问题,需要使用encodeURIComponent对数据进行解码。
5、解决办法
注意:使用encodeURIComponent进行编码的时候,需要对参数的特殊字符进行转换,并转换成string类型。
(1)编码
uni.navigateTo({
// obj 含有特殊字符 使用JSON.stringify()对特殊字符进行转化 并使用encodeURlComponent()进行编码 浏览器才能读懂
url:'./components/addIn?dataItem='+encodeURlComponent(JSON.stringify(obj))
});
(2)解码
总结:
先把数据JSON.stringify转string格式,再使用encodeURIComponent对数据特殊字符进行转换。跳转页面后,使用decodeURIComponent把特殊字符转回来,再使用JSON.parse转成对象格式即可。