菰城鸥鹭 2024-02-02 20:35 采纳率: 84.6%
浏览 5
已结题

小程序跨页面传递参数使用this.setData修改如何去除引号

小程序跨页面传递参数使用this.setData修改如何去除引号
不要修改成字符串

img


转换后

img


不带引号

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-02 20:36
    关注

    引自免费微信小程序:皆我百晓生

    在小程序中,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序列化和反序列化的方式来传递。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月6日
  • 已采纳回答 2月2日
  • 创建了问题 2月2日

悬赏问题

  • ¥20 python爬虫遇到空文本取不出来
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入