IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 六、微信小程序-快速回顾 ( 页面间传参 ) -> 正文阅读

[游戏开发]六、微信小程序-快速回顾 ( 页面间传参 )


在实际开发中,经常会有页面间跳转时需要传递参数的场景,本文回顾一下微信小程序中常用的页面传参方式

演示前的准备

1. 为了方便演示,先创建两个页面,/pages/from/index/pages/to/index,我们使用简便的创建方式,直接
app.json 中为 pages 数组添加两个页面的路径,然后保存,让微信开发者工具自动帮我们创建,重点代码 2 - 5 行:

{
    "pages": [
        "pages/a/index",
        "pages/b/index"
    ],
    "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "Weixin",
        "navigationBarTextStyle": "black"
    },
    "style": "v2",
    "sitemapLocation": "sitemap.json"
}

创建后的结构如下:
请添加图片描述


1. URL 传参


URL 传参的方式,非常简单常用,当参数不是特别多的时候建议使用:

  1. 声明 URL 参数,顾名思义,就是将参数写在 URL 中,如 /index?param1=value1&param2=value2
  2. 在页面生命周期函数 onLoad(options) 中通过函数参数 options 获取 URL 中的参数,如 options.param1

示例:URL 传参:

1. Form 页面部分

(1) 在页面布局文件中添加链接标签 <navigator>,并在 url 属性中指定跳转地址,以及拼接待传递的参数:

<navigator url="/pages/to/index?param=B">点击跳转到 To 画面</navigator>

2. To 页面部分

(1) 在页面逻辑文件的在生命周期函数 onLoad(options) 中通过函数参数 options 获取 URL 中的参数:

Page({
  data: {
    param: ''
  },
  onLoad(options) {
    this.setData({
      param: options.param
    })
  }
})

(2) 页面布局文件中,展示获取的 URL 参数:

<view wx:if="{{param}}">From 画面传递的参数是:{{param}}</view>

3. 运行效果:
URL传参

2. 向前一画面传参


这种传参的场景是,Form 页面跳转到 To 页面后,又从 To 页面跳回到 Form 页面,这时向 From 页面传参

向前一画面传参的核心点是,在 To 页面中使用 getCurrentPages() 获取 页面跳转记录栈 中的页面组件数组,然后通
过修改前一页面组件的值来实现传参的效果,注意,这种向前一画面传参的方式,要求使用页面组件压栈而非页面组
件卸载的跳转方式


示例:向前一画面传参:

1. Form 页面部分

(1) 在页面逻辑文件中定义接收参数的变量

Page({
  data: {
    param: ''
  }
})

(2) 在页面布局文件中,创建跳转到 To 页面的链接,并在下面展示从 To 页面返回时的参数

<navigator url="/pages/to/index">点击跳转到 To 画面</navigator>
<view wx:if="{{param}}">To 画面传递的参数是:{{param}}</view>

2. To 页面部分

(1) 在页面逻辑文件中定义按钮点击事件的处理函数,在函数中使用 getCurrentPages() 获取 页面跳转记录栈 中前
一个页面的页面组件,并修改页面组件数据,最后通过 wx.navigateBack api 返回到前一画面

Page({
  // 按钮点击事件处理函数
  handleTap(){
    // 从页面跳转栈中获取页面组件数组
    const pages = getCurrentPages()
    // 获取前一个画面的页面组件对象
    const prePage = pages[pages.length - 2]
    // 修改前一个画面的页面组件的属性值
    prePage.setData({
      param:'B'
    })
    // 弹栈返回到前一个画面
    wx.navigateBack({
      delta: 1,
    })
  }
})

(2) 在页面布局文件中添加一个按钮,并绑定点击事件和事件处理函数

<button bind:tap="handleTap">点击跳转到 Form 画面</button>

3. 运行效果:
向前一画面传参

3. 全局变量实现传参


这种方式很简单,直接利用了在 app.js 中定义的变量为全局变量的特性来实现,通过使用微信小程序的缓存功能
也可以实现全局变量传参的效果,原理一样


示例:全局变量实现传参

1. Form 页面部分

(1) 在页面逻辑文件中定义按钮点击事件的处理函数,触发后设置全局变量,最后跳转到目标页面,注意,不管是页
面逻辑文件、组件逻辑文件还是应用逻辑文件,修改自定义的属性都不需要使用 this.setData,直接修改即可:

Page({
  handleTap() {
    // 获取唯一的应用实例
    const app = getApp()
    console.log(app)
    // 获取参数
    app.param = 'A'
    // 跳转
    wx.navigateTo({
      url: '/pages/to/index',
    })
  }
})

(2) 在页面布局文件中添加按钮,并绑定事件和事件处理函数:

<button bind:tap="handleTap">点击跳转到 To 画面</button>

2. To 页面部分

(1) 在页面逻辑文件中,定义生命周期函数,在函数内获取全局变量:

Page({
  data: {
    param: ''
  },
  onLoad() {
    // 获取唯一的应用实例
    const app = getApp()
    // 获取参数
    this.setData({
      param: app.param
    })
  }
})

(2) 在页面布局文件中,展示参数:

<view wx:if="{{param}}">From 画面传递的参数是:{{param}}</view>

(3) 运行效果:
全局变量实现传参

4. 发布事件


在使用微信小程序内置 api wx.navigateTo 进行跳转时,会有一个 success(res) 函数的回调,回调函数的参
res 中有一个 eventChannel 对象,该对象是页面间事件通信对象,可以利用该对象发布一个自定义事件,
并在目标页中对该事件进行监听


示例:发布事件

1. Form 页面部分

(1) 在页面逻辑文件中定义按钮点击事件的处理函数,在函数内使用 wx.navigateTo 进行页面跳转,并在 success
调函数内发布一个自定义事件

Page({
  handleTap() {
    // 跳转
    wx.navigateTo({
      // 目标路径
      url: '/pages/to/index',
      // 跳转后回调,利用页面间事件通信对象发布自定义事件
      success(res){
        res.eventChannel.emit('myEvent',{param:'A'})
      }
    })
  }
})

(2) 在页面布局文件中添加按钮,并绑定事件和事件处理函数:

<button bind:tap="handleTap">点击跳转到 To 画面</button>

2. To 页面部分

(1) 在页面逻辑文件中,定义生命周期函数 onLoad,并在函数内监听 Form 页面发布的自定义函数:

Page({
  data: {
    param: ''
  },
  onLoad() {
    // 获取页面间事件通信对象
   const eventChannel = this.getOpenerEventChannel()
   // 监听自定义事件
   eventChannel.on('myEvent',(req)=>{
     this.setData({
       param: req.param
     })
   })
  }
})

(2 在页面布局文件中,展示参数:

<view wx:if="{{param}}">From 画面传递的参数是:{{param}}</view>

3. 运行效果:
发布事件

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 16:02:57  更:2022-05-01 16:03:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:27:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码