【微信小程序】-- WXML 模板语法 - 事件绑定 -- tap input (十)

news2024/11/15 21:26:00

请添加图片描述

  • 💌 所属专栏:【微信小程序开发教程】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

文章目录

  • 前言
  • 一、事件
      • 1、事件的定义
      • 2、小程序中常用的事件
      • 3、事件对象的属性列表
      • 4、 target 和 currentTarget 的区别
  • 二、tap 事件
      • 1、bindtap 的语法格式
      • 2、在事件处理函数中为 data 中的数据赋值
      • 3、事件传参
  • 三、input 事件
      • 1、bindinput 的语法格式
      • 2、实现文本框和 data 之间的数据同步
  • 总结


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【微信小程序开发教程】专栏的第10篇文章;
  今天开始学习微信小程序的第六天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【微信小程序开发教程】, 此专栏是我是夜阑的狗微信小程序开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


一、事件

  前面已经介绍完了WXML模板语法–数据绑定,基本上了解到了如何在WXML页面上动态的显示数据以及组件上的属性控制等。接下来就来讲解一下另外一个模板语法–事件绑定。话不多说,让我们原文再续,书接上回吧。

请添加图片描述

1、事件的定义

  在一起学习小程序里事件怎么绑定之前,首先先来了解一下什么是事件?事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。

在这里插入图片描述

  当用户在页面上触发按钮点击事件的时候,渲染层将触发的事件通过微信客户端传给逻辑层(JS端)进行处理。

2、小程序中常用的事件

  在小程序中常用的事件三种,分别是 tapinputchange 事件,相信大家对这些事件应该都不会陌生,其中 tap 为点击事件一般用得比较多。

类型绑定方式事件描述
tapbindtap 或 bind:tap手指触摸后马上离开
类似于 HTML 中的 click 事件
inputbindinput 或 bind:input文本框的输入事件
changebindchange 或 bind:change状态改变时触发

  事件绑定方式有两种,第一种是 bind + 类型,第二种是 bind: + 类型。但平时用最多的是第一种方式。

3、事件对象的属性列表

  当事件回调触发的时候,会收到一个事件对象 event,它的详细属性如下表所示:

属性类型说明
typeString事件类型
timeStampInteger页面打开到触发事件所经过的毫秒数
targetObject触发事件的组件的一些属性值集合
currentTargetObject当前组件的一些属性值集合
detailObject额外的信息
touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组
changedTouchesArray触摸事件,当前变化的触摸点信息的数组

  在实际开发过程中,会经常用到 event.target ,基本用得比较多的属性都给标红了。

4、 target 和 currentTarget 的区别

   在对象 event 中,target 是触发该事件的源头组件,而 currentTarget 则是当前事件所绑定的组件。通过下面的栗子来进行详细了解:

在这里插入图片描述
  在WXML中在 view 组件内部添加按钮 button,当点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层 viewtap 事件处理函数,简而言之就是当父元素设置了点击事件时,子元素也能触发。具体来看一下运行效果:

在这里插入图片描述

  此时这两个属性就会有区别,对于内部的 button 来说:

  • event.target 指向的是触发事件的源头组件,因此,event.target 是指向当前组件 button
  • event.currentTarget 指向的是当前正在触发事件的那个组件,也就是绑定触发事件的,因此,event.currentTarget 是指向外部组件 view

二、tap 事件

1、bindtap 的语法格式

  在小程序中,不存在 HTML 中的 onclick 鼠标点击事件,而是通过 tap 事件来响应用户的触摸行为。结合上一个栗子,就会有个疑问:假设外内部都设置有 tap 事件,实际效果会使怎么样的呢?下面来进行实践一下。

cshPageTab.js:

  在页面的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event(可以简写成 e) 来接收:

Page({
  tabHandler(event){
    console.log("event.target =====>",event.target);
    console.log("event.currentTarget =====>",event.currentTarget);
  },
  btnTabHandler(event){
    console.log("button event.target =====>",event.target);
    console.log("button event.currentTarget =====>",event.currentTarget);
  }
})

cshPageTab.wxml:

  通过 bindtap 方式,可以为组件绑定 tap 触摸事件,语法如下:

<view id="thisOut" class="view-click" bindtap="tabHandler">
  <button id="thisIn" type="primary" bindtap="btnTabHandler">CSH</button>
</view>

  这样就实现了 tap 事件绑定了。

  • 点击外部组件:

在这里插入图片描述

  • 点击内部组件:

在这里插入图片描述
  对比两次点击结果,可以发现,内外组件都设置了 tap 事件,点击内部按钮都会一起触发。

2、在事件处理函数中为 data 中的数据赋值

  当我们想通过点击来改变某个数值时,就可以调用 this.setData(dataObject) 方法,可以给页面 data 中的数据重新赋值,可以通过下面的🌰来学习一下:

cshPageTab.js:

  通过 this.data 就能获取当前 data 里面的数据,在刷新数值即可。

Page({
  /**
   * 页面的初始数据
   */
  data: {
    count: 0,
  },

  // count + 6 的点击事件处理函数
  btnCount(event){
    this.setData({
      count: this.data.count + 6
    })
  }
})

cshPageTab.wxml:

<view id="thisOut" class="view-click" bindtap="tabHandler">
  <button id="thisIn" type="primary" bindtap="btnTabHandler">CSH</button>
  <button type="primary" bindtap="btnCount">+6</button>
</view>

  可以来看一下实际效果:请添加图片描述

3、事件传参

  小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。比如下面的代码是不能正常运行,在 Vue 里面这样写是没有问题,但在小程序中是不行的。

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

  因为小程序 bindtap 后面引号内容代表的是事件处理函数的名字理,相当于要调用一个名称为 btnCount(123) 的事件处理函数。

  • 传递参数

  那小程序怎么传递参数呢?这里就可以通过组件提供 data-* 自定义属性传参,其中 * 代表的是参数的名字,具体实现代码如下:

  <button type="primary" bindtap="btnCountEvent" data-info="{{2}}">事件传参</button>

  其中,info 会被解析为参数的名字,数值 2 会被解析为参数的值,如果这里不用双括号,那接收到的参数会是字符串类型。

  • 获取参数

  在事件处理函数中,通过 event.target.dataset.参数名 即可获取到具体参数的值,具体实现代码如下:

Page({
  btnCountEvent(event){
    // 通过 dataset 可以访问到具体参数的值
    console.dir(event.target.dataset.info);
  },
})

  其中 dataset 是一个对象,里面包含了所有通过 data-* 传递过来的参数项。可以来看一下实际效果:

在这里插入图片描述

三、input 事件

1、bindinput 的语法格式

  在小程序中,也可以对文本输入框进行绑定事件,通过 input 事件来响应文本框的输入事件,语法格式如下:

cshPageTab.js:

  在页面的 .js 文件中定义事件处理函数:

Page({
  btnInput(event){
    // event.detail.value 是变化后的值,文本框里最新的值
    console.dir("event.detail.value = " + event.detail.value);
  },
})

cshPageTab.wxml:
  在小程序中,通过 input 事件来响应文本框的输入事件,语法格式如下:

<input bindinput="btnInput"></input>

  可以来看一下实际效果:

请添加图片描述

2、实现文本框和 data 之间的数据同步

  在实际开发过程中,文本框里的数据只要与data的数据要进行同步。其实现流程可分为以下步骤:

  • Step 1、定义数据

cshPageTab.js:

Page({
  /**
   * 页面的初始数据
   */
  data: {
    msg: "我是夜阑的狗,你好呀!",
  },
})
  • Step 2、渲染结构

cshPageTab.wxml:

<input value="{{msg}}" bindinput="btnInput"></input>
  • Step 3、美化样式

cshPageTab.wxss:

input{
  border: 1px solid rgb(161, 153, 153);
  padding: 5px;
  margin: 5px;
  border-radius: 3px;
}
  • Step 4、绑定 input 事件处理函数

cshPageTab.js:

  在页面的 .js 文件中定义事件处理函数,通过前面的栗子可以知道怎么刷新 data 里的值,所以只要获取到文本框里最新的值,在将其重新给 msg 赋值即可。

Page({
  btnInput(event){
    // event.detail.value 是变化后的值,文本框里最新的值
    console.dir("event.detail.value = " + event.detail.value);
    // 通过event.detail.value获取文本框最新的值,再给msg赋值
    this.setData({
      msg: event.detail.value,
    });
  },
})

  可以来看一下实际效果:

请添加图片描述

  我的周末就这么没了,啊啊啊啊

请添加图片描述


总结

  感谢观看,这里就是常用的视图容器类组件的介绍使用,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹
在这里插入图片描述
  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:

  • 😀 【LeetCode题解(持续更新中)】
  • 🚝 【Java Web项目构建过程】
  • 💛 【微信小程序开发教程】
  • 【JavaScript随手笔记】
  • 🤩 【大数据学习笔记(华为云)】
  • 🦄 【程序错误解决方法(建议收藏)】
  • 🚀 【软件安装教程】



订阅更多,你们将会看到更多的优质内容!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模电学习8. 三极管推挽电路

模电学习8. 三极管推挽电路一、推挽的概念二、三极管基本的推挽电路1. 上N下P型电路(1) 原理图(2) 电流分析2. 上P下N型(1) 原理图(2) 电流分析三、电路仿真分析1. 测试原理图2. 简要分析三、三极管的交越失真2. 处理方式三、三极管推挽电路的缺点一、推挽的概念 在电路中&…

Android性能优化(三)—— 绘制优化

运行的 Android 手机&#xff0c;虽然配置在不断的提升&#xff0c;但是仍然无法和 PC 相比&#xff0c;无法做到 PC 那样拥有超大内存以及高性能的 CPU。因此在开发 Android 应用程序时也不可能无限制的使用 CPU 和内存&#xff0c;如果对 CPU 和 内存使用不当也会造成应用的卡…

Tomcat的部署详解(基于Centos7.9))

文章目录Tomcat的部署1.1 安装jdk1.2、安装Tomcat1.3 Tomcat的目录结构1.4 Tomcat管理Tomcat web管理功能Tomcat配置文件TomcatTomcat&#xff1a;一种web服务器 Tomacat是由Apache推出的一款免费开源的Servlet容器&#xff0c;可实现JavaWeb程序的装载。 Tomcat服务器是一个…

大数据处理各组件概念及作用

一、数据采集&#xff1a; 1.1 Flume集群&#xff1a;数据采集工具&#xff0c;如写脚本将不同源端的数据采集后进行数据存储&#xff0c;或推送至Kafka等&#xff1b; 1.2 FTP集群&#xff1a;文件传输工具&#xff1b; 1.3 Kafka集群&#xff1a;消息队列&#xff0c;未避免…

UEFI启动的七阶段笔记

研究起点是CPU收到ResetVector信号后&#xff0c;开始执行第一行代码&#xff0c;一直到计算机关机/重启/崩溃&#xff0c;被划分为七个不同阶段。 1. SEC安全阶段 最早开始运行的固件代码&#xff0c;很大部分是汇编语言开发的。 主要负责四件事&#xff1a; 处理平台所有的…

纯手动搭建大数据集群架构_记录007_搭建Zookeeper3.5.7集群_集群配置_集群脚本---大数据之Hadoop3.x工作笔记0168

然后我们来搭建一下zookeeper集群,这个集群,以后不管是搭建Hadoop高可用,还是nifi集群,还是 hive 集群,hbase集群,spark集群,kettle集群,sqoop集群,都是基础 [root@hadoop122 ~]# cd /opt/software/ [root@hadoop122 software]# ll 总用量 479040 -rw-r--r--. 1 root root 9…

时间颗粒度选择(通过选择时间范围和颗粒度展示选项)

<template><div><el-time-selectplaceholder"起始时间"v-model"startTime":picker-options"startPickerOptions"change"changeStartTime"></el-time-select><el-time-selectplaceholder"结束时间&quo…

【Python】python深拷贝与浅拷贝详解(必须掌握)

深拷贝和浅拷贝是python必须要掌握的内容&#xff0c;无论你是面试开发、测试、运维等职位&#xff0c;只要是python&#xff0c;深拷贝与浅拷贝是面试官常问的一个重要知识点。 &#xff08;关注“测试开发自动化” 弓中皓&#xff0c;获取更多学习内容&#xff09; 文章目录一…

软件测试如何进行需求分析,你真的学会了吗?

目录 前言 从宏观的角度看需求文档 从细节的角度看需求文档 1&#xff09;结构化项目流程 2&#xff09;确认影响模块 3&#xff09;考量综合因素 需求的测试成本与质量风险 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配…

Win11安卓应用自动化测试的准备

前言 APP的自动化测试&#xff0c;前提从ADB连接设备&#xff0c;启动APK应用开始。Win 11自带的WSA的APP的测试&#xff0c;要完全自动化&#xff0c;需要解决几个问题。 1、 启动WSA 此项有两步&#xff1a; i 启动WSA服务 Python程序来启动服务&#xff0c;可以直接调用…

DP1621国产LCD驱动芯片兼容替代HT1621B

目录DP1621简介DP1621芯片特性DP1621简介 DP1621是点阵式存储映射的LCD驱动器芯片&#xff0c;可支持最大128点&#xff08;32SEG * 4COM&#xff09;的 LCD屏&#xff0c;也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显示数据&#xff0c;也可通过指…

jmeter基本使用

jmeter基本使用 1.jemeter基本介绍 Jmeter 是什么 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测 试JMeter 可用于 Web 应用测试&#xff0c;后来扩展到了其他测试领域具体来说, Jmeter 可以测试静态和动态资源&#xff0c;比如…

C语言Switch语句用法

C switch 语句 一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case&#xff0c;且被测试的变量会对每个 switch case 进行检查。 语法 C 语言中 switch 语句的语法&#xff1a; switch(expression){case constant-expression :statement(s);break;…

论索引的重要性

开篇小测验下面这样一个小SQL 你该怎么样添加最优索引两个表上现在只有聚集索引bigproduct 表上已经有聚集索引 ProductIDbigtransactionhistory 表上已经有聚集索引 TransactionID你是否一眼就能看出来呢&#xff1f;答案将在文章中逐步揭晓~~~简单粗暴的添加索引首先我们看一…

企业如何做好员工安全意识提升

背景&#xff1a; 近年来随着网络安全政策、技术的不断发展&#xff0c;国内企业对于安全的重视程度越来越高&#xff0c;安全建设投入力度越来越大&#xff0c;安全防御能力得到了明显的提升。然而&#xff0c;企业面临一个尴尬的问题就是&#xff0c;企业即使做了很多安全防…

Java还值得选择吗?

自1995年Java问世&#xff0c;到2023年已经差不多存在了28年。作为高级编程语言&#xff0c;他的生命周期相比很多编程语言都长&#xff0c;也见证了很多编程语言的辉煌时刻&#xff0c;不过Java始终都是名列前茅。 Java的主要优势在于其一次编写、随处运行。简单来讲&#xf…

185、【栈与队列】leetcode ——496. 下一个更大元素 I:单调栈-哈希表(C++版本)

题目描述 原题链接&#xff1a;496. 下一个更大元素 I 解题思路 本题与 739. 每日温度 的区别在于&#xff0c;需要先通过让nums1与nums2判定出为想等元素后&#xff0c;再去找nums2中更大的数。 因此&#xff0c;第一步需要找到想等数&#xff0c;第二步需要找到大于的数。…

快手电商新增商品信息诊断规则,对商家有何影响?

1、2022年快手短剧日活跃用户达2.6亿 新榜讯 近日&#xff0c;快手数据显示&#xff0c;2022年快手短剧日活跃用户达2.6亿&#xff0c;现在的付费用户数对比2022年4月增长超过480%&#xff0c;快手已经是最大的短剧消费市场。此外&#xff0c;2023年快手小游戏日活跃用户峰值超…

【Go】基于telegraf进行自定义插件开发(二)

基于telegraf进行自定义插件开发&#xff08;二&#xff09;前言正文设计开发过程单个服务的处理结构体同时定义了string和数值类型适配本机服务或者多个ip来源程序打包结语前言 书接上会&#xff0c;这次记录一下我基于telegraf进行的hdfs监控组件的开发工作&#xff0c;这其…

RabbitMQ实现延时队列

目录什么是延时队列延时队列的使用场景前提准备利用RabbitMQ实现延时队列延时队列优化利用RabbitMQ插件实现延迟队列什么是延时队列 延时队列&#xff0c;首先&#xff0c;它是一种队列&#xff0c;队列意味着内部的元素是有序的&#xff0c;元素出队和入队是有方向性的&#…