• 微信小程序使用路由传参和传对象的方法


    近期在做微信小程序开发,在页面跳转时,需要携带参数到下一个页面,尤其是将对象传入页面。为了方便重温,特此记录。

    路由传字符串参数

    原始页面

    传递字符串参数比较简单。路由跳转有两种方式,一种是通过navigator组件的url完成,另一种是使用wx.navigateTo()跳转。wxml代码如下:

    1. <view>Author:益添view>
    2. <view>
    3. <navigator url="/pages/tim/demo/demo?name=Tim&sex=男" hover-class="navigator-hover">navigator携带字符串参数navigator>
    4. view>
    5. <button bind:tap="tapStringParameter">传递字符串参数button>

    需要通过按钮的方法响应传递,则在js中,定义一个tapStringParameter方法,处理点击后的工作

    1. tapStringParameter(){
    2. console.log("tapStringParameter")
    3. wx.navigateTo({
    4. url: '/pages/tim/demo/demo?name=Tim&sex=男'
    5. })
    6. },

    接收参数的页面

    在对应的pages/tim/demo/demo页面,在onLoad方法中接收参数,代码和示例如下:

    1. onLoad(options) {
    2. console.log(options)
    3. console.log(options.name, options.sex)
    4. }

    效果如下,分别点击navigator和按钮,都可以获取到对应的参数。

    路由传递对象

    由于字符串传递的参数需要转换,且参数的长度有限(路由字符串具体长度笔者未看到说明,可能和http的get方法一样,在实际开发过程中遇到过超限无法完整传递的情况)。因此要传递对象,就需要使用wx.navigateTo()中的回调函数。

    原始页面

    接下来,在上述的wxml页面上,增加一个按钮

    1. <view>Author:益添view>
    2. <view>
    3. <navigator url="/pages/tim/demo/demo?name=Tim&sex=男" hover-class="navigator-hover">navigator携带字符串参数navigator>
    4. view>
    5. <button bind:tap="tapStringParameter">传递字符串参数button>
    6. <button bind:tap="tapObjectParameter">传递对象参数button>

    在js中,我们增加“tapObjectParameter”方法。在方法中创建一个对象,并在wx.navigateTo()的success回调中,添加一个事件,命名为“acceptDataFromOpenerPage”,将对象传入。在url中,我们还是可以通过字符串传递参数。

    1. // pages/tim/index/index.ts
    2. Page({
    3. tapStringParameter(){
    4. console.log("tapStringParameter")
    5. wx.navigateTo({
    6. url: '/pages/tim/demo/demo?name=Tim&sex=男'
    7. })
    8. },
    9. tapObjectParameter(){
    10. console.log("tapObjectParameter")
    11. let person = {
    12. name: '益添',
    13. sex: '男'
    14. }
    15. wx.navigateTo({
    16. url: '/pages/tim/demo/demo?name=Tim&sex=男',
    17. success: function(res) {
    18. // 通过eventChannel向被打开页面传送数据
    19. res.eventChannel.emit('acceptDataFromOpenerPage', person)
    20. }
    21. })
    22. }
    23. })

    接收参数的页面

    在onLoad函数中,使用this.getOpenerEventChannel()获取当前的事件频道,然后监听“acceptDataFromOpenerPage”事件,在回调中,即可获取传递过来的参数。

    1. // pages/tim/demo/demo.ts
    2. Page({
    3. onLoad(options) {
    4. console.log(options)
    5. console.log(options.name, options.sex)
    6. const eventChannel = this.getOpenerEventChannel()
    7. // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
    8. eventChannel.on('acceptDataFromOpenerPage', function (data) {
    9. console.log("acceptDataFromOpenerPage")
    10. console.log(data)
    11. console.log(data.name, data.sex)
    12. })
    13. }
    14. })

    点击按钮,可以看到各页面传入的中的参数能正常输出。

    参考链接:

    导航 / navigator (qq.com)

    路由 / wx.navigateTo (qq.com)

  • 相关阅读:
    JS对CSS的操作
    【c++刷题Day3】专题3T2
    JS奇淫技巧:一行赋值语句,能玩出多少花样?
    uni微信小程序隐私协议
    【K8S】GitLab CI 整合 Harbor 和 Nexus
    laravel框架的优缺点是什么?
    顺序表(c++类模板实现)
    VScode配置LuatOS开发模拟环境
    捷报又至!牛辅材斩获“2022年度最佳影响力品牌”大奖!
    Python3,这应该是,配置文件最全的写法了。
  • 原文地址:https://blog.csdn.net/tg928600774/article/details/133611809