当前位置: 首页 > news >正文

微信小程序如何实现页面传参和页面传递多个参数

前言

只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递,下面我总结了 4 种页面方法。

下面时多个参数页面传参的方式

let love=JSON.stringify(this.data.totle);let you=JSON.stringify(this.data.totleId)let csdn=JSON.stringify(this.data.totlePrice)wx.navigateTo({url: '/pages/fly/fly?totle='+love+'&totleid='+you+'&totleprice='+csdn,})

 

路径传递

通过在url后面拼接参数,参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如 ‘path?key=value&key2=value2’。

案例:A页面带参数跳转到B页面
A页面跳转代码

goB(){wx.navigateTo({url: '/pages/B/index?id=value',})},

B页面接收代码

onLoad: function (options) {console.log('id', options.id)
}

上面的案例是字符串参数,但是很多情况下需要传递对象,如下方代码。

Page({data: {userInfo:{name:'cym',age:16}},goB(){wx.navigateTo({url: '/pages/B/index?id='+this.data.userInfo,})},
})

如果使用上面同样的方式结构,输出的结果是:[object Object]

这个时候需要先把对象通过JSON.stringify(obj)将 object 对象转换为 JSON 字符串进行参数传递,再到接收页面通过JSON.parse解析使用。

A页面跳转代码

 goB(){let userStr = JSON.stringify(this.data.userInfo)wx.navigateTo({url: '/pages/B/index?id='+userStr,})}

B页面接收代码

onLoad: function (options) {console.log('id', JSON.parse(options.id))}

全局变量

通过App全局对象存放全局变量。

app.js代码

App({// 存放对象的全局变量globalData:{},
})

A页面跳转代码

// 获取App对象
const app = getApp()
Page({/*** 页面的初始数据*/data: {userInfo: {name: 'cym',age: 16}},goB() {app.globalData.userInfo = this.data.userInfowx.navigateTo({url: '/pages/B/index',})},
})

B页面接收代码

// 获取全局对象const app = getApp()
Page({onLoad: function (options) {console.log(app.globalData.userInfo)}
})

存放在 App 全局变量里面,可以被多个页面使用,直接从 App 对象获取即可。这个数据是保持在内测中,每次小程序销毁就没有了。

数据缓存

通过存储到数据缓存中。

A页面跳转代码

goB() {wx.setStorageSync('userInfo', this.data.userInfo)wx.navigateTo({url: '/pages/B/index',})}

B页面接收代码

onLoad: function (options) {let userInfo = wx.getStorageSync('userInfo', this.data.userInfo)console.log(userInfo)}

存放在数据缓存里面,可以被多个页面使用,直接用 getStorageSync 获取即可。这个数据是保持在数据缓存中,除非清楚数据缓存或者删除小程序否则一直存在。

事件通信

通过事件通信通道。

A页面跳转代码

goB() {wx.navigateTo({url: '/pages/B/index',success:(res)=>{// 发送一个事件res.eventChannel.emit('toB',{ userInfo: this.data.userInfo })}})}

B页面接收代码

onLoad: function (options) {//	获取所有打开的EventChannel事件const eventChannel = this.getOpenerEventChannel();// 监听 index页面定义的 toB 事件eventChannel.on('toB', (res) => {console.log(res.userInfo) })}

总结

大家可以针对具体业务场景来进行选择合适自己的传参方式。

http://www.lryc.cn/news/146436.html

相关文章:

  • ChatGPT⼊门到精通(3):ChatGPT 原理
  • nginx配置keepalive长连接
  • Thread.enumerate方法
  • * 号靠近数据类型,和靠近变量名, 号靠近数据类型,和靠近变量名,有什么区别
  • 为了做好农业,拼多多请来顶尖农业专家当独立董事
  • Linux服务器安装部署MongoDB数据库 – 【无公网IP远程连接】
  • Python+PIL+qrcode实现二维码自由—普通二维码+彩色二维码+logo二维码+动态二维码(附完整代码)
  • 【Spring Data JPA】JPA 常用查询函数
  • Visual Studio 2022的MFC框架——AfxWinMain全局对象和InitInstance函数
  • 【网络】多路转接——poll | epoll
  • 音视频 ffmpeg命令视频录制(Windows)
  • 【拾枝杂谈】从游戏开发的角度来谈谈原神4.0更新
  • QT设置mainwindow的窗口title
  • SaaS多租户系统架构设计
  • Java自定义捕获异常
  • 力扣--数组类题目27. 移除元素
  • 实际并行workers数量不等于postgresql.conf中设置的max_parallel_workers_per_gather数量
  • java定位问题工具
  • 【Java】基础入门 (十六)--- 异常
  • [javaWeb]Socket网络编程
  • <MySon car=“宝马“ :money=“money“></MySon>有没有冒号
  • netty(三):NIO——多线程优化
  • Linux操作系统--linux概述
  • 数组中出现次数超过一半的数字
  • 网络优化工程师,你真的了解吗?
  • git 的常用命令
  • linux如何拷贝文件,删除多余的一级目录,用*号代替所有文件
  • springboot使用properties
  • Android中获取手机SIM卡的各种信息
  • matlab 根据索引提取点云