WXML模板语法-事件绑定

简介: 这篇文章主要介绍了微信小程序中的事件处理机制。事件是渲染层与逻辑层通信的方式,允许开发者响应用户行为。常见的事件有`bindtap`,用于处理点击事件。事件处理函数中,可以通过`event`对象获取相关属性,如`target`(触发事件的源头组件)和`currentTarget`(事件绑定的组件)。事件参数传递可通过`data-*`属性实现,然后在事件处理函数中通过`event.target.dataset`访问。此外,`bindinput`用于监听输入框变化,配合`detail.value`可以获取最新的输入值,并实现数据同步。

一、

1.事件


事件是渲染层到逻辑层的通讯方式,通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理


2.小程序中常用的事件



3.事件对象的属性列表


当事件回调触发的时候,会收到一个事件对象event,其属性为:



二、


1.target和currentTarget


target是触发该事件的源头组件,而currentTarget是当前事件所绑定的组件


例如:




点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层view的tap事件处理函数


此时,对于外层的view来说:


e.target指向的是触发事件的源头组件,因此,e.target是内部的按钮组件


e.currentTarget指向的是当前正在触发事件的那个组件,因此,e.currentTarget是当前的view组件


2.bindtap


在小程序中,不存在HTML中的onclick鼠标点击事件,而是通过tap事件来响应用户的触摸行为


(1)通过bindtap,可以为组件绑定tap触摸事件


<button type="primary" bindtap="btnTapHandler">按钮</button>


(2)在页面的.js文件中定义对应的事件处理函数,事件参数通过形参event(一般写为e)来接收


Page({
  data: {
    btnTapHandler(e) { //按钮的tap事件处理函数
      console.log(e) //事件的参数对象e
    }
  })


三、


1.在事件处理函数中为data中的数据赋值


通过调用this.setData(data Object)方法,可以给页面data中的数据重新赋值


<!--pages/list/list.wxml-->
<button type="primary" bindtap="CountChange">+1</button>


// pages/list/list.js
Page({
  data: {
    count:0
  },
 
  //修改count的值
  CountChange(){
    this.setData({
      count:this.data.count + 1
    })
  }
 
})




每按一次+1,控制台的count都会加一


2.事件传参


小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数


<button type="primary" bindtap="btnHandler(123)">事件传参</button>


以上代码不能正常运行


因为小程序会把bindtap的属性值统一当作事件名称来处理,相当于要调用一个名称为btnHandler(123)的事件处理函数


可以为组件提供data-*自定义属性传参,其中*代表的是参数的名字


<!--pages/list/list.wxml-->
<button type="primary" data-info="{{2}}">事件传参</button>


nfo会被解析为参数的名字,数值2被解析为参数的值


在事件处理函数中,通过event.target.dataset.函数名即可获取到具体参数的值


<!--pages/list/list.wxml-->
<button type="primary" bindTap="btnTap" data-info="{{2}}">+2</button>


// pages/list/list.js
Page({
  data: {
    count:0
  },
 
  btnTap(e) {
    this.setData({
      count:this.data.count + e.target.dataset.info
    })
  }
 
 
})


如果明确知道自己传的是一个数字的话,建议大家放在Mustache语法里面


3.bindinput的语法格式


在小程序中,通过input事件来响应文本框的输入事件


(1)通过bindinput,可以为文本框绑定输入事件


<!--pages/list/list.wxml-->
<input bindinput="inputHandler"></input>


// pages/list/list.js
Page({
  data: {
    count:0
  },
 
  inputHandler(e){
    //e.detail.value是变化过后,文本框最新的值
    console.log(e.detail.value)
  }
 
 
})




4.实现文本框和data之间的数据同步


实现步骤:


(1)定义数据



(2)渲染结构



(3)美化样式



(4)绑定input事件处理函数



目录
相关文章
如何将DataGridView中的滚动条显示出来
1、选项设置   DataGridView有一个ScrollBars,可以设置水平滚动条,垂直滚动条,或者两种包含。   2、实际运行效果
5929 0
|
Java Maven Spring
如何在idea中创建Springboot项目? 手把手带你创建Springboot项目,稳!
文章详细介绍了在IDEA中创建Spring Boot项目的过程,包括选择Spring Initializr、配置项目属性、选择Spring Boot版本、导入依赖、等待依赖下载以及项目结构简介。
14443 1
执行npm run dev的时候发生了什么
执行npm run dev的时候发生了什么
1238 60
|
小程序 JavaScript Java
微信小程序的后端开发需要使用什么语言?
【8月更文挑战第22天】微信小程序的后端开发需要使用什么语言?
2188 65
|
弹性计算 关系型数据库 MySQL
Docker安装MySQL
这篇文章详细介绍了如何使用Docker安装MySQL数据库服务,包括拉取镜像、配置数据卷以及启动容器的步骤。
1151 1
Docker安装MySQL
|
存储 机器学习/深度学习 人工智能
【LangChain系列】第八篇:文档问答简介及实践
【5月更文挑战第22天】本文探讨了如何使用大型语言模型(LLM)进行文档问答,通过结合LLM与外部数据源提高灵活性。 LangChain库被介绍为简化这一过程的工具,它涵盖了嵌入、向量存储和不同类型的检索问答链,如Stuff、Map-reduce、Refine和Map-rerank。文章通过示例展示了如何使用LLM从CSV文件中提取信息并以Markdown格式展示
694 2
|
小程序 UED
axure rp原型设计基础
Axure RP原型设计基础‌
316 4
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程新范式
【9月更文挑战第27天】在AI技术飞速发展的今天,编程领域也迎来了新的变革。本文将深入探讨AI如何改变编程范式,以及这种变革对程序员和整个软件开发行业的影响。通过分析AI技术的特点和优势,我们将揭示它如何为编程带来更高效、智能的解决方案,并展望这一趋势对未来软件开发的深远影响。
271 2
ly~
|
安全 Java 编译器
Java 是如何实现跨平台的?
Java 通过 Java 拟机(JVM)实现了跨平台功能。首先,Java 源代码经编译器转换为与平台无关的字节码,这种中间代码可在任何具备 JVM 的平台上运行。其次,JVM 解释执行字节码,并根据需要利用即时编译(JIT)技术将其转换为目标平台的本地机器码以提升性能。此外,JVM 还提供了统一的运行环境,包括内存管理、线程管理以及安全控制等功能,确保 Java 程序在不同操作系统上具有一致的行为表现。
ly~
1137 9