收藏
回答

wx.navigateTo传参后接收参数不完整


data: {
  arry:"crmAccountDetail?queryBean=",
},


handleTap: function() {
  wx.navigateTo({
    url: '../search/search?queryBean=' + JSON.stringify(this.data.arry),
  })
},

但是在接收界面onLoad的时候,接收的值是被从?往后截取掉的

经过测试,把?去掉,接收的值也会把=往后截取掉的



onLoad: function(options) {
   console.log("当前的searchObj是:" + options.queryBean);//当前的searchObj是:"crmAccountDetail
   this.data.searchObj = JSON.parse(options.queryBean); //解析得到对象
   this.setData({
     searchObj: JSON.parse(options.queryBean)
   })
 },




百度搜索到的内容:

因为不能上链接,所以就把内容复制过来了。原作者:韦弦zhy




微信小程序导航参数中含有问号


参数含有问号怎么办.jpg

有时从一个页面导航到另一个页面需要携带参数,而正巧的是,参数中含有问号(?),此时,后面的页面在onLoad: function (options)中是拿不到我们想要的数据的

比如:

 wx.navigateTo({
      url: "../about/about?a=3?3"
 })

我们拿到的options中却是:

{a=3}

后面的数据直接丢失了

解决方法有三:
一、将该参数设为全局变量
var app = getApp()app.globalData.paramsName = " "

然后在需要的界面去取

二、存入storage
  wx.setStorageSync("paramName", "paramValue")

然后在需要的界面使用

   wx.getStorage({
      key: 'paramName',
      success: function(res) {
        console.log(res.data)
      },
   })
三、使用escape转码 和 unescape解码
    let data = escape("4?4")
    wx.navigateTo({
      url: "../about/about?a=" + data   })
  onLoad: function (options) {

    console.log(options)
    let a = options.a 
    a = unescape(a)
    console.log(a)
  }

和三一样,还可以使用 encodeURIComponentdecodeURIComponent 这就是小程序中导航的参数含有?的解决方案,如果还有其他好的方法,欢迎留言交流。


最后一次编辑于  01-23
回答关注问题邀请回答
收藏

2 个回答

  • 三生
    三生
    01-16

    百度了一番后,终于解决了。


    使用 encodeURIComponentdecodeURIComponent转码和解码就好了。


    还有人说使用escape转码 和 unescape解码




    01-16
    赞同
    回复
  • 拾忆
    拾忆
    01-16

    传参里面带?肯定不行呀,你unicode下

    01-16
    赞同
    回复 1
    • 三生
      三生
      01-16

      还是不行,在把?和=用unicode转换后,在接收参数的时候自动把?和=省略了

      01-16
      回复