微信小程序页面路由跳转传参和获取值

本文介绍了微信小程序中使用catchtap事件进行点击处理,并通过事件参数e获取传递的数据。接着讲解如何在目标页面的onLoad函数中接收传入的参数,最后讨论如何利用接收到的值进行页面渲染。适合前端初学者参考。

1.catchtap点击事件(与bindtap相比 可阻止冒泡) data-id 后面是你要传递的东西
<view class="goods" wx:for='{{goodsList}}' wx:key="ORDER_CODE" catchtap="toGoodsDetail" data-id="{{item.ID}}">
2.点击事件通过e(event)来获取传递的值

---微信小程序js文件
  toGoodsDetail(e){
    // console.log(e);
    var ID = e.currentTarget.dataset.id;
    wx.navigateTo({
    //动态路由传参
      url: '../../pages/goodsdetail/index?ID='+ID,
    })
  },

3.跳转到的页面通过onLoad 函数(option)接收传递过来的值

 /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var ID = options.ID
  },

4.拿到值后就可以进行页面渲染了, 前端小白白欢迎大佬指点!

微信小程序中,向方法传递参数的方式有多种,具体取决于传参的场景需求。以下是几种常见的传参方式: ### 1. **通过事件传参** 在 WXML 文件中,可以通过 `data-` 属性为事件处理函数传递参数。例如: ```html <button bindtap="btuHandler" data-user-id="1" data-userName="zhangsan">事件传参</button> ``` 在对应的 JS 文件中,可以通过事件对象的 `currentTarget.dataset` 取这些参数: ```javascript Page({ btuHandler: function(event) { const userId = event.currentTarget.dataset.userId; // 输出 1 const userName = event.currentTarget.dataset.userName; // 输出 zhangsan } }) ``` 这种方式适合在页面中的组件(如按钮)触发事件时传递参数[^4]。 --- ### 2. **通过路由传参** 在页面跳转时,可以通过 URL 的查询字符串传递参数。例如: ```javascript wx.navigateTo({ url: '/pages/targetPage/targetPage?id=5213828&name=test' }); ``` 在目标页面的 `onLoad` 函数中可以取这些参数: ```javascript Page({ onLoad: function(options) { console.log(options.id); // 输出 '5213828' console.log(options.name); // 输出 'test' } }) ``` 需要注意的是,URL 中的参数长度有限制,并且特殊字符需要进行编码以确保安全传输。可以通过 `encodeURIComponent()` `decodeURIComponent()` 进行编码与解码[^1]。 --- ### 3. **通过本地缓存传参** 如果需要传递的数据较为复杂或者不适合放在 URL 中,可以使用本地缓存(如 `wx.setStorageSync()`)来存储数据,在目标页面中再通过 `wx.getStorageSync()` 取数据。例如: ```javascript // 页面 A:存储数据 wx.setStorageSync('userData', { id: 1, name: 'zhangsan' }); // 页面 B:取数据 const userData = wx.getStorageSync('userData'); console.log(userData.id); // 输出 1 console.log(userData.name); // 输出 zhangsan ``` 这种方式适合传递大量数据或复杂对象[^2]。 --- ### 4. **直接调用函数传参** 如果是在 JS 内部调用函数,可以直接通过函数参数传递值。例如: ```javascript function greet(name) { console.log('Hello, ' + name); } greet('zhangsan'); // 输出 "Hello, zhangsan" ``` 这种传参方式适用于不需要跨页面或跨组件的场景。 --- ### 5. **全局变量传参** 可以在 `app.js` 中定义全局变量,然后在不同页面中访问修改这些变量。例如: ```javascript // app.js App({ globalData: {} }); // 页面 A const app = getApp(); app.globalData.user = { id: 1, name: 'zhangsan' }; // 页面 B const app = getApp(); console.log(app.globalData.user); // 输出 { id: 1, name: 'zhangsan' } ``` 这种方式适合需要在多个页面之间共享数据的情况。 --- ### 6. **通过事件总线传参** 可以使用自定义事件机制在不同页面或组件之间传递参数。例如: ```javascript // 页面 A const eventBus = require('./eventBus'); eventBus.emit('userSelected', { id: 1, name: 'zhangsan' }); // 页面 B const eventBus = require('./eventBus'); eventBus.on('userSelected', function(userData) { console.log(userData.id); // 输出 1 console.log(userData.name); // 输出 zhangsan }); ``` 这种方式适合松耦合的模块间通信。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值