uniapp路由传参存在数据类型失真的问题

export default {
  methods: {
    jump() {
      // 通过params传参
      this.$Router.push({name: 'demo', params: {
      	number:1,
        name: '123',
        value: null
      }})
    }
  }
}

目标模块接收参数:

export default {
  onLoad() {
    // 获取参数
    const {number,name, value} = this.$Route.query
    console.log(number,name,value) // '1', '123', 'undefined'
  }
}

这时发现,目标模块接收到的参数都会变成字符串类型,并且null值会变成字符串的undefined;

解决以上问题,可以将传递的参数构造成一个嵌套对象,如用一个data属性来装填我们的参数:

export default {
  methods: {
    jump() {
      // 通过params传参
      this.$Router.push({
        name: 'demo', 
        params: {
          data: {
            number:1,
        	name: '123',
        	value: null
          }
        }
      })
    }
  }
}
### 实现 UniApp 路由传参的方法 在 UniApp 中,路由传参主要依赖于 `uni.navigateTo` 方法来完成。此方法允许开发者通过 URL 参数的形式将数据传递给目标页面。 对于简单的参数传递场景,可以直接拼接字符串形成带有查询参数的 URL 地址: ```javascript // 传递单个参数的例子 function openWeb(id) { uni.navigateTo({ url: '/pages/index/index?id=' + encodeURIComponent(id), // 对特殊字符编码以确保安全性 }); } ``` 当需要传递更复杂的数据结构(比如对象),则可以通过 JSON 序列化的方式将其转换成字符串再作为参数附加到 URL 上,在接收端解析该字符串恢复原始数据形态[^2]。 另外一种更为优雅的做法是在调用 `navigateTo` 成功后的回调函数内利用事件通道发送消息给即将打开的新页面,这种方式不仅限于基本类型的变量还可以轻松处理较为复杂的 JavaScript 数据类型: ```html <script> export default { methods: { cli() { uni.navigateTo({ url: '/pages/search/search', success(res) { res.eventChannel.emit('accept', { data: "传递参数", id: 10, complexData: { key: 'value' } }) } }); }, } }; </script> ``` 为了使上述机制生效,接收页也需要做相应的准备工作以便能够监听到来自前一页的消息并作出响应。这通常涉及到设置好 event channel 来捕获这些信息[^3]。 综上所述,UniApp 提供了多种灵活的方式来满足不同应用场景下的需求,无论是简单还是复杂的数据都可以方便地随着导航操作一起被携带过去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值