首页 > 编程语言 >从实际案例出发,一文讲明如何设计小程序事件系统

从实际案例出发,一文讲明如何设计小程序事件系统

时间:2023-08-07 15:56:41浏览次数:39  
标签:一文 程序 用户 案例 冒泡 attr 组件 讲明 事件

事件是视图层到逻辑层的通讯方式。事件可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。事件对象可以携带额外信息,如id,dataset,touches。事件分为冒泡事件和非冒泡事件. 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

什么是事件?

微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。

小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数,对象可以携带额外信息,如 id, dataset, touches。

汇总来说小程序的事件是一种处理用户交互的方式,通过监听用户的操作行为,触发相应的事件来处理具体的业务逻辑和显示效果。小程序事件主要包括用户操作事件和自定义事件,开发人员需要了解这些事件的方法和机制,以便正确地处理用户的操作,并实现良好的用户体验。

 

事件分类

小程序开发中的事件分为冒泡事件和非冒泡事件:

1、冒泡事件

当一个组件上的事件被触发后,该事件会向父节点传递。例如下图所示:

 

2、非冒泡事件

当一个组件上的事件被触发后,该事件不会向父节点传递。无特殊声明都是非冒泡事件,如 form 的submit事件,input 的input事件,scroll-view 的 scroll 事件。

案例实操演示

具体如何操作我们这里以 WXML 为例,从底层逻辑上来讲,在我们还没有进行事件绑定时,只在小程序的 WXML 结构中声明了一个键值对。

将 WXML 进行 virtualDOM 编译,这里的编译就是 virtualDOM 使用过的 $gwx 函数,一起来看下声明的 tap 键值对编译在了哪里。

 

可以看到上面找到声明事件标记的层级中,attr 属性内部有 bindtap: bindTextTap 键值对。那么这个 DOM 结构是怎么进行事件解析的呢?

解析的算法在底层基础库 WAWebview.js 文件中,我们现在此提前解析一下事件模块完整的流程,为了防止到后面底层基础库章节再讲的话,知识形成不了闭环。

我这里解析的基础库版本为2.11.0。

底层基础库中解析 virtualDOM 函数 applyProperties 源码如下, attr 属性解析,包含事件解析。

 

紧接着返回的l函数源码:

 

可以看到 applyProperties 中有一个 forIn 循环去遍历 virtualDOM 中的 attr 属性。

然后执行e函数,这里可知e函数的参数及为attr对象中的属性名称key。

e函数中有很多的if,是用来判断特殊的属性名称的,我们绑定的tap事件键值对是 bindtap: bindTextTap , key 也就是 bindtap ,事件绑定的前缀有很多比如 bind、catch,看到第10行左右的if中用正则if (n = e.match(/^(capture-)?(mut-)?(bind|catch):?(.+)$/)) 判断 attr 中的属性名是否为事件属性。如果是事件属性的话执行E函数,并且转换为 exparser 组件系统中的 attr 属性名称 exparser:info-attr- 。

小程序事件系统总结

小程序中,事件是处理用户交互的重要手段,通过监听用户操作行为和自定义事件,可以实现复杂的业务逻辑和良好的用户体验。开发人员需要了解不同的事件类型和触发方法,根据不同的业务需求进行灵活使用和处理。同时,良好的事件设计和处理也是提升应用程序质量和用户满意度的关键因素之一。

当我们说到小程序想必大家第一时间想到的就是微信小程序、支付宝小程序等,其实除了将我们开发好的小程序上架到各个平台之上,我们还可以通过集成 FinClip SDK 将小程序上架到自己的 App 中,这样就能最大化的实现一次开发多端上架,大幅降少在开发中的人力和成本投入。

 

标签:一文,程序,用户,案例,冒泡,attr,组件,讲明,事件
From: https://www.cnblogs.com/Xxx1m/p/17611657.html

相关文章

  • 服务器数据恢复-断电导致XenServer虚拟磁盘文件丢失的数据恢复案例
    服务器数据恢复环境:某单位一台Dell服务器上使用RAID卡搭建了一组由4盘RAID10。服务器安装的XenServer虚拟化操作系统,虚拟机采用的WindowsServer操作系统。共系统盘和数据盘两个虚拟机磁盘,上层部署的是Web服务器(ASP+SQLServer架构)。服务器故障&分析:由于服务器突然断电,服务器......
  • 视频融合平台视频汇聚平台LiteCVR与文旅大数据平台相关案例概念分享
    LiteCVR视频融合平台是一个基于云边端协同架构的平台,旨在支持旅游行业的信息化建设和智能化管理需求。该平台具备多种视频能力,包括监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、语音对讲和智能分析等功能。它可以广泛应用于旅游、工地、工厂、园区、楼宇、校......
  • 实景案例 售楼部入口水景镜面不锈钢抽象雕塑图片 手工锻造镜面不锈钢飘带雕塑
    实景案例售楼部入口水景镜面不锈钢抽象雕塑图片手工锻造镜面不锈钢飘带雕塑......
  • 拖拽宫格vue-grid-layout详细应用及案例
    目录1、前言2、安装3、属性4、事件5、占位符样式修改6、案例1、前言vue-grid-layout是一个适用于vue的拖拽栅格布局库,功能齐全,适用于拖拽+高度/宽度自由调节的布局需求。本文将讲述一些常用参数和事件,以及做一个同步拖拽的Demo。效果动态图如下:2、安装vue2版本:npminstall......
  • 一文告诉你为什么代码提交要关联需求和任务信息丨IDCF
    本文从代码提交关联需求任务的功能说起,探讨了其意义、功能扩展以及对研发效能提升带来的收益。记得原来有一次听到一个开发同学抱怨说为啥每次Commit都必须要填写commitmessage呢?他觉得有些浪费时间,因此想出了各种办法来应对,比如输入一个句点或复制粘贴上个commitmessage等。这种......
  • Unity的IUnityLinkerProcessor:深入解析与实用案例
    UnityIUnityLinkerProcessorUnityIUnityLinkerProcessor是Unity引擎中的一个接口,它允许开发者在Unity项目构建时对代码进行链接处理。这个接口可以用来优化项目构建大小,减少不必要的代码和资源,提高项目的性能和加载速度。接口定义IUnityLinkerProcessor接口定义如下:namespac......
  • 工程监测振弦采集应用岩土工程案例
    振弦传感器是一种用于测量结构物或土体中振动的传感器。通过将传感器安装在结构物或土体中,可以准确地测量振动的频率和振幅,并从中获得结构或土体的状态信息。在岩土工程中,振弦采集技术广泛应用于桥梁、隧道、地铁等大型工程项目的监测和安全评估中。在桥梁的设计、施工和使用过程......
  • 工程监测振弦采集应用岩土工程案例之一
    随着科技的发展和应用,振弦采集技术已经广泛应用于岩土工程领域的工程监测中。对于岩土工程而言,振弦采集是一种非常有效的测量和监测方法,它可以对结构物的刚度,动力特性、振动幅值等进行精确测量和分析。下面我们通过一个岩土工程案例,来了解振弦采集技术在工程监测中的应用。案例简介......
  • OpenERP分析会计(Analytic Account)应用案例
    AnalyticAccount,分析会计,也叫管理会计、成本会计。分析会计有何应用呢?试看两个例子:1)佣金计算,对于每一张销售订单(SO,SalesOrder),业务员提成销售额的1%,关系人返点(回扣)5%。如何配置OpenERP系统以实现本业务需求呢?2)制造费用分配,我们知道生产成本核算中,先要按标准费率计算加工费用,......
  • k8s实战案例之运行Java单体服务-jenkins
    1、jenkins架构基于java命令,运⾏javawar包或jar包,本次以jenkins.war包部署⽅式为例,且要求jenkins的数据保存⾄外部存储(NFS或者PVC),其他java应⽤看实际需求是否需要将数据保存⾄外部存储。从上述架构图可以看到,Jenkins通过k8s上的pv/pvc来连接外部存储,通过svc的方式向外暴露......