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

小程序组件间通信

文章目录

        • 父传子
        • 子传父
        • 获取组件实例
        • 兄弟通信

父传子

知识点:

父组件如果需要向子组件传递指定属性的数据,在 WXML 中需要使用数据绑定的方式

与普通的 WXML 模板类似,使用数据绑定,这样就可以向子组件的属性传递动态数据。

父组件如果需要向子组件传递数据,只需要两个步骤:

1.在父组件 WXML 中使用 数据绑定 的方式向子组件传递动态数据

2.子组件内部使用 properties 接收父组件传递的数据即可

知识点代码:

<!-- 引用组件的页面模板 -->
<view><costom prop-a="{{ name }}" prop-b="{{ age }}" />
</view>

在组件内部,需要在 Component 构造器中通过 properties 接收传递的数据,接收方式有两种:

Component({/*** 组件的属性列表 props*/properties: {propA: {type: String, // 传递的数据类型value: '' // 默认值},propB: Number // 简化的定义方式},// coding...
})

在子组件中也可以通过 this.setData()properties 中的数据进行修改,但是一般不建议修改

// components/custom01/custom01.js
Component({/*** 组件的方法列表*/methods: {// 修改列表中的数据updateProp () {this.setData({propB: this.properties.propB + 1})}}
})
子传父

子组件如果需要向父组件传递数据,可以通过小程序提供的事件系统实现传递传递,可以传递任意数据。

事件系统是组件间通信的主要方式之一,自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件,流程如下:

  1. 自定义组件触发事件时,需要使用 triggerEvent 方法发射一个自定义的事件
  2. 自定义组件标签上通过 bind 方法监听发射的事件

触发事件:

<!-- 在自定义组件中 -->
<button type="primary" plain bindtap="sendData">传递数据</button>
// components/custom05/custom05.js
Component({// 组件的初始数据data: {num: 666},// 组件的方法列表methods: {// 将数据传递给父组件sendData () {// 如果需要将数据传递给父组件// 需要使用 triggerEvent 发射自定义事件// 第二个参数,是携带的参数this.triggerEvent('myevent', this.data.num)}}
})

监听事件:

<view>{{ num }}</view>
<!-- 需要在自定义组件标签上通过 bind 方法绑定自定义事件,同时绑定事件处理函数 -->
<custom05 bind:myevent="getData" />
Page({data: {num: ''},getData (event) {// 可以通过事件对象.detail 获取子组件传递给父组件的数据// console.log(event)this.setData({num: event.detail})}})
获取组件实例

如果前面两种方式不足以满足需要。

可在父组件里调用 this.selectComponent() ,获取子组件的实例对象,就可以直接拿到子组件的任意数据和方法。调用时需要传入一个匹配选择器 selector,如:this.selectComponent(".my-component")

<!-- 父组件 -->
<costom bind:myevent="getData" class="custom" />
<button bindtap="getChildComponent"></button>
// 父组件
Page({data: {},getChildComponent: function () {const child = this.selectComponent('.custom')console.log(child)}
})
兄弟通信

如果一个页面通过 wx.navigateTo 打开一个新页面,这两个页面间将建立一条数据通道

  1. wx.navigateTosuccess 回调中通过 EventChannel 对象发射事件

  2. 被打开的页面可以通过 this.getOpenerEventChannel() 方法获得一个 EventChannel 对象,进行监听、发射事件

  3. wx.navigateTo 方法中可以定义 events 配置项接收被打开页面发射的事件

这两个 EventChannel 对象间可以使用 emiton 方法相互发送、监听事件。

在这里插入图片描述

代码:

页面 .js 文件

Page({// 点击按钮触发的事件处理函数handler () {wx.navigateTo({url: '/pages/list/list',events: {// key:被打开页面通过 eventChannel 发射的事件// value:回调函数// 为事件添加一个监听器,获取到被打开页面传递给当前页面的数据currentevent: (res) => {console.log(res)}},success (res) {// console.log(res)// 通过 success 回调函数的形参,可以获取 eventChannel 对象// eventChannel 对象给提供了 emit 方法,可以发射事件,同时携带参数res.eventChannel.emit('myevent', { name: 'tom' })}})}})

被页面 .js 文件

Page({onLoad () {// 通过 this.getOpenerEventChannel() 可以获取 EventChannel 对象const EventChannel = this.getOpenerEventChannel()// 通过 EventChannel 提供的 on 方法监听页面发射的自定义事件EventChannel.on('myevent', (res) => {console.log(res)})// 通过 EventChannel 提供的 emit 方法也可以向上一级页面传递数据// 需要使用 emit 定义自定义事件,携带需要传递的数据EventChannel.emit('currentevent', { age: 10 })}})

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle 数据库常用命令与操作指南
  • 【乐企】基础版接口代码实现
  • 【iOS】引用计数(一)
  • 0基础学习HTML(十一)列表
  • xilinx hbm ip运用
  • 什么是堡垒机?运维为什么需要堡垒机?
  • Apache James配置连接达梦数据库
  • ldd可以显示出程序启动时需要静态加载的动态库的完整列表
  • CMake中如何使用全局配置文件来配置项目
  • 828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
  • 【数据结构-二维差分】力扣2536. 子矩阵元素加 1
  • Kafka-Go学习
  • 5.内容创作的未来:ChatGPT如何辅助写作(5/10)
  • 算法题之每日温度
  • Vue学习记录之三(ref全家桶)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【知识碎片】第三方登录弹窗效果
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CSS 提示工具(Tooltip)
  • Otto开发初探——微服务依赖管理新利器
  • PAT A1120
  • Sass 快速入门教程
  • sessionStorage和localStorage
  • springboot_database项目介绍
  • Windows Containers 大冒险: 容器网络
  • 基于遗传算法的优化问题求解
  • 深度解析利用ES6进行Promise封装总结
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​iOS实时查看App运行日志
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (39)STM32——FLASH闪存
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Qt) 默认QtWidget应用包含什么?
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .Net core 6.0 升8.0
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET 回调、接口回调、 委托
  • .Net 执行Linux下多行shell命令方法
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net的DataSet直接与SQL2005交互
  • .net反编译的九款神器
  • .NET学习教程二——.net基础定义+VS常用设置
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • ??myeclipse+tomcat
  • @AliasFor注解
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ 蓝桥杯Web真题 ]-布局切换
  • [1127]图形打印 sdutOJ
  • [16/N]论得趣
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [Android Studio] 开发Java 程序