微信小程序-----WXML模板语法之数据绑定与事件绑定

 目录

 前言

一、数据绑定

1.Mustache语法 

2.Mustache 语法的应用场景

(1)绑定内容

(2)绑定属性

(3)运算(三元运算、算术运算等)

二、事件绑定

1.事件

(1)什么是事件

(2)小程序中常用的事件

(3)事件对象的属性列表

(4)target 和 currentTarget 的区别

2.bindtap 的语法格式

(1)点击事件响应

(2)处理函数中为 data 中的数据赋值

(3)事件传参

3.bindinput 的语法格式

(1)输入事件响应

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


 前言

        今天我们接着学习微信小程序的代码语法,今天的学习目标是掌握wxml模版语法中的数据绑定和事件绑定,这部分的内容是微信小程序代码语法的重点内容,我会很详细的去介绍这部分内容的语法,下面就开始本期的学习吧。

        本期内容是实现同一根目录下的wxml文件js文件之间的通讯。

一、数据绑定

数据绑定方式分为以下两个步骤:
① 在 data 中定义数据
② 在 WXML 中使用数

1.Mustache语法 

这里我要重点去介绍一种新的语法 Mustache 语法,这种语法在wxml可以完美的处理数据绑定通讯问题。
Mustache 语法的格式
把data中的数据绑定到页面中渲染,使用 Mustache 语法 (双大括号)将变量包起来即可。语法格式为:
<view>{{要绑定的数据名称}}</view>

2.Mustache 语法的应用场景

(1)绑定内容

绑定内容就是要显示的内容以js文件中定义的变量形式去表达。

js文件代码内容:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    s:'我是IKUN'
  }
})

wxml代码内容:

<!-- 1. 绑定内容 -->
<view>{{ s }}</view>
(2)绑定属性

绑定属性一般是组件的属性内容去通过js文件中定义的变量形式去表达出来,下面示例是image组件的图片路径,去通过js文件中定义的路径字符串传入到image标签当中。

js文件代码内容:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    imgsrc:'/image/微信图片_20240113220335.png'
  }
})

wxml代码内容:

<!-- 2. 绑定属性 -->
<image src="{{ imgsrc }}" style="width: 100%;" mode="widthFix"/>
(3)运算(三元运算、算术运算等)

运算就是非常常见的方式了,通过js后端运算出的结果,以参数的形式传入到wxml当中,如下所示随机数的三元运算和一般运算。

js文件代码内容:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    num1:Math.random()*10,
    num2:Math.random().toFixed(2)
  }
})

wxml代码内容:

<!-- 3. 三元运算 -->
<view>{{num1>=5?"yes":"no"}}</view>
<!-- 4. 运算处理 -->
<view>{{num2*100}}</view>

执行结果:

二、事件绑定

1.事件

(1)什么是事件

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

(2)小程序中常用的事件

类型

绑定方式

事件描述

tap

bindtap bind:tap

手指触摸后马上离开,类似于 HTML 中的 click 事件

input

bindinput bind:input

文本框的输入事件

change

bindchange bind:change

状态改变时触发

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

属性

类型

说明

type

String

事件类型

timeStamp

Integer

页面打开到触发事件所经过的毫秒数

target

Object

触发事件的组件的一些属性值集合

currentTarget

Object

当前组件的一些属性值集合

detail

Object

额外的信息

touches

Array

触摸事件,当前停留在屏幕中的触摸点信息的数组

changedTouches

Array

触摸事件,当前变化的触摸点信息的数组

(4)target 和 currentTarget 的区别
target 触发该事件的源头组件 ,而 currentTarget 则是 当前事件所绑定的组件 。举例如下:

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

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

  • e.target 指向的是触发事件的源头组件,因此,e.target 是内部的按钮组件
  • e.currentTarget 指向的是当前正在触发事件的那个组件,因此,e.currentTarget 是当前的 view 组件

2.bindtap 的语法格式

在小程序中,不存在 HTML 中的 onclick 鼠标点击事件,而是通过 tap 事件 来响应用户的触摸行为。
(1)点击事件响应
① 通过 bindtap ,可以为组件绑定 tap 触摸事件,wxml语法如下:
<button type="primary" bindtap="btnevent">点我</button>
bindtap="btnevent" 中的btnevent是一个函数,这个函数要在js文件中具体表示
② 在页面的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event (一般 简写成 e ) 来接收
  btnevent(e){
    //打印事件e内容
    console.log(e)
  }

界面显示结果:

这里我们点开控制台就可以去查看结果:

(2)处理函数中为 data 中的数据赋值

wxml代码:

<!--数据赋值  -->
<button type="primary" bind:tap="add1">点击+1</button>

通过调用 this.setData(dataObject) 方法,可以给页面 data 中的数据重新赋值。同样的我们在js文件当中继续去定义一个add1函数以及在data中去声明一个变量count,代码如下

Page({

  /**
   * 页面的初始数据
   */
  data: {
    s:'我是IKUN',
    imgsrc:'/image/微信图片_20240113220335.png',
    num1:Math.random()*10,
    num2:Math.random().toFixed(2),
    count:0,
  },

  btnevent(e){
    //打印事件e内容
    console.log(e)
  },
  
  add1(){
    //点击之后打印OK
    console.log('ok'),
    this.setData({
      //进行+1处理
      count:this.data.count+1
    })
  },
})

 图形界面结果:

这里我们打开控制台就可以去查看count的结果了:

(3)事件传参

错位示范:

小程序中的事件传参比较特殊, 不能在绑定事件的同时为事件处理函数传递参数 。例如,下面的代码将不能正 常工作:
<button type="warn" bind:tap="tap(222)">!!!!</button>
因为小程序会把 bindtap 的属性值,统一当作事件名称来处理,相当于要调用一个名称为 tap(123) 的事件处理函数。
正确写法:
可以为组件提供 data-* 自定义属性传参,其中 * 代表的是参数的名字 ,示例代码如下:
<!-- 传递参数 -->
<button type="warn" bind:tap="tap" data-info="{{2}}">点击+2</button>
最终:
  •  info 会被解析为参数的名字
  •  数值 2 会被解析为参数的值

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

Page({

  /**
   * 页面的初始数据
   */
  data: {
    s:'我是IKUN',
    imgsrc:'/image/微信图片_20240113220335.png',
    num1:Math.random()*10,
    num2:Math.random().toFixed(2),
    count:0
  },

  btnevent(e){
    //打印事件e内容
    console.log(e)
  },
  
  add1(){
    //点击之后打印OK
    console.log('ok'),
    this.setData({
      //进行+1处理
      count:this.data.count+1
    })
  },

  tap(e){
    console.log(e),
    this.setData({
       //对上面count进行加上传入的参数值
      count:this.data.count+e.target.dataset.info
    })
  }

})

  图形界面结果:

 同样的我们打开控制台调试器AppData就可以去查看了,这里就不做演示。

3.bindinput 的语法格式

(1)输入事件响应
在小程序中,通过 input 事件 来响应文本框的输入事件,语法格式如下:
① 在wxml中通过 bindinput,可以为文本框绑定输入事件:
<!-- 输入事件 -->
<input type="text" bindinput="inputdata" name="" id=""/>
② 在页面的 .js 文件中定义事件处理函数:
  //input事件
  inputdata(e){
    console.log(e.detail.value);
  }

这里我在wxss中再加上一个输入框美化样式 

input{
  border: 1px solid red;
  border-radius: 3px;
  margin: 5px;
  padding: 5px;
}

 结果图形化展示:

 打开控制台查看结果:

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

这里我们可以使用input组件的value属性去设置初始化值,wxml代码如下所示:

<!-- 数据同步 -->
<input type="text" value="{{msg}}" bindinput="inputdata2" name="" id=""/>

然后我们在js文件定义msg变量的值,然后去设置一个同步函数inputdata2, js文件代码:

  inputdata2(e){
    this.setData({
      msg:e.detail.value
    });
  }

 同样的我们打开控制台调试器AppData就可以去查看了,这里就不做演示。

 最终整体结果wxml代码:

<!-- 数据绑定 -->
<!-- 1. 绑定内容 -->
<view>{{ s }}</view>

<!-- 2. 绑定属性 -->
<image src="{{ imgsrc }}" style="width: 100%;" mode="widthFix"/>
<!-- 3. 三元运算 -->
<view>{{num1>=5?"yes":"no"}}</view>
<!-- 4. 运算处理 -->
<view>{{num2*100}}</view>


<!-- 事件绑定 -->

<!-- 点击事件 -->
<button type="primary" bindtap="btnevent">点我</button>
<!--数据赋值  -->
<button type="primary" bind:tap="add1">点击+1</button>
<!-- 传递参数 -->
<button type="warn" bind:tap="tap" data-info="{{2}}">点击+2</button>

<!-- 输入事件 -->
<input type="text" bindinput="inputdata" name="" id=""/>
<!-- 数据同步 -->
<input type="text" value="{{msg}}" bindinput="inputdata2" name="" id=""/>

 最终整体结果的.js文件代码:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    s:'我是IKUN',
    imgsrc:'/image/微信图片_20240113220335.png',
    num1:Math.random()*10,
    num2:Math.random().toFixed(2),
    count:0,
    msg:"IKUN"
  },

  btnevent(e){
    //打印事件e内容
    console.log(e)
  },
  
  add1(){
    //点击之后打印OK
    console.log('ok'),
    this.setData({
      //进行+1处理
      count:this.data.count+1
    })
  },

  tap(e){
    console.log(e),
    this.setData({
      count:this.data.count+e.target.dataset.info
    })
  },

  //input事件
  inputdata(e){
    console.log(e.detail.value);
  },

  //事件同步
  inputdata2(e){
    this.setData({
      msg:e.detail.value
    });
  },
})

 图形化界面展示:

 想要获取更多的学习资源,可以点击以下链接查看。 黑马程序员web前端视频教程从入门到精通Web前端视频教程完整版_Web前端视频教程从入门到精通_黑马程序员 (itheima.com)

 以上就是本期的全部内容了,我们下次见!

分享一张壁纸:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java安装(可多版本共存)及IIntelliJ IDEA环境搭建汉化(保姆级教程!)

编程如画&#xff0c;我是panda&#xff01; 这次给大家出一期JAVA安装以及IIntelliJ IDEA的安装教程 IIntelliJ IDEA分为社区版和专业版&#xff0c;两版的教程都有&#xff0c;小伙伴们根据需要自行选择使用 并且我会讲解一台计算机中多个版本JAVA JDK配置安装 前言 我最早接…

尼科彻斯定理----C语言

大家好我是Beilef许久未见了&#xff0c;小弟学校考试刚结束。这个过程懂的都懂。痛------ 文章目录 目录 文章目录 前言(一不好懂可以直接跳到二&#xff09; 一、尼科彻斯定理是什么&#xff1f; 二、尼科彻斯定理解析 这是ai的回答 尼科彻斯定理&#xff08;Nikomačs theor…

Django项目中的默认文件都有什么用

manager.py&#xff1a; 是django用于管理本项目的命令行工具&#xff0c;之后进行站点运行&#xff0c;数据库自动生成等都是通过本文件完成。 djangoStudy/__init__.py&#xff1a; 告诉python该目录是一个python包&#xff0c;暂无内容&#xff0c;后期一些工具的初始化可…

SPI通信讲解

了解SPI通信对于我们了解通信有非常重要的意义。 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司&#xff08;摩托罗拉&#xff09;开发的一种通用数据总线 四根通信线&#xff1a; SCK&#xff08;Serial Clock&#xff09;&#xff1a;时钟线&a…

PHP反序列化总结4--原生类总结

原生类的简要介绍以及原生类和反序列化的关系 PHP 原生类指的是 PHP 内置的类&#xff0c;它们可以直接在 PHP 代码中使用且无需安装或导入任何库&#xff0c;相当于代码中的内置方法例如echo &#xff0c;print等等可以直接调用&#xff0c;但是原生类就是可以就直接php中直接…

【存储过程和存储函数】MySQL

存储过程和存储函数 一、实验目的 掌握通过SQL语句CREATE PROCEDURE创建存储过程的方法。 掌握使用SQL语句CALL调用存储过程的方法。 掌握使用SQL语句ALTER PROCEDURE修改存储过程的方法。 掌握使用SQL语句DROP PROCEDURE删除存储过程的方法。 掌握使用CREATE FUNCTION创建…

【ESP32接入语言大模型之智谱清言】

1. 智谱清言 讲解视频&#xff1a; 随着人工智能技术的不断发展&#xff0c;自然语言处理领域也得到了广泛的关注和应用。智谱清言作为千亿参数对话模型 基于ChatGLM2模型开发&#xff0c;支持多轮对话&#xff0c;具备内容创作、信息归纳总结等能力。可以快速注册体验中国版…

机器学习 | 无监督聚类K-means和混合高斯模型

机器学习 | 无监督聚类K-means和混合高斯模型 1. 实验目的 实现一个K-means算法和混合高斯模型&#xff0c;并用EM算法估计模型中的参数。 2. 实验内容 用高斯分布产生 k k k个高斯分布的数据&#xff08;不同均值和方差&#xff09;&#xff08;其中参数自己设定&#xff…

第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

解锁 JavaScript 数组的强大功能:常用方法和属性详解(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

摆脱油光和黑头,先敷15分钟的亚马逊白泥面膜吧

寒冷干燥的冬季&#xff0c;是皮肤最容易出现问题的时候&#xff0c;像是油性皮肤就更容易出油&#xff0c;另外黑头之类的问题也会变得更加常见。因此&#xff0c;在这个季节里&#xff0c;我们需要特别注意保护皮肤&#xff0c;多多补水保湿&#xff0c;同时深入清洁毛孔是非…

SpringCloud.03.网关Gateway

目录 网关Gateway的概念&#xff1a; 准备 使用 方式一 因为配置了网关所以可以直接通过gateway发送请求 方式二 修改配置前&#xff1a;http://localhost:8082/provider/run 方式三(动态路由) 导入配置类 网关Gateway的概念&#xff1a; Spring Cloud Gateway 是 Spri…

分布形态的度量_峰度系数的探讨

集中趋势和离散程度是数据分布的两个重要特征,但要全面了解数据分布的特点&#xff0c;还应掌握数据分布的形态。 描述数据分布形态的度量有偏度系数和峰度系数, 其中偏度系数描述数据的对称性,峰度系数描述与正态分布的偏离程度。 峰度系数反映分布峰的尖峭程度的重要指标. 当…

失踪人员信息发布与管理系统:计算机毕设课题的研究与实践 springboot+java+vue+mysql

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

认知觉醒(九)

认知觉醒(九) 专注力——情绪和智慧的交叉地带 第一节 情绪专注&#xff1a;一招提振你的注意力 用元认知来观察自己的注意力是一件很有意思的事情&#xff0c;相信你可以轻易观察到这种现象&#xff1a;身体做着A&#xff0c;脑子却想着B。 跑步的时候&#xff0c;手脚在…

力扣日记1.14-【二叉树篇】108. 将有序数组转换为二叉搜索树

力扣日记&#xff1a;【二叉树篇】108. 将有序数组转换为二叉搜索树 日期&#xff1a;2023.1.14 参考&#xff1a;代码随想录、力扣 108. 将有序数组转换为二叉搜索树 题目描述 难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;…

现代控制理论基础

在学习卡尔曼滤波、粒子滤波、隐马尔可夫模型时候&#xff0c;经常会提到状态方程的概念&#xff0c;这边联想到当时学习过的一门课程现代控制理论&#xff0c;这边就简单回顾一下吧。在回顾之前&#xff0c;串联下高等数学中微分方程的知识点。 一. 微分方程 高等数学上册第…

架构师 - 架构师是做什么的 - 学习总结

架构师核心定义 架构师是什么 架构师是业务和技术之间的桥梁 架构师的核心职责是消除不确定性、和降低复杂性 架构设计环 架构师的三个核心能力 架构师的三个关键思维 架构师主要职责 架构设计 Vs 方案设计 架构设计前期 主要任务 澄清不确定性 明确利益干系人的诉求消除冲…

10.9.2 std::function 非OO的多态实现 Page185~187

源代码&#xff1a; #include <iostream> #include <functional> #include <list>using namespace std;//使用function模板类定义一个类型&#xff0c; //该类型要求作为T的 //函数类型是参数是string,返回值是void typedef std::function <void (std::s…

全链路压测方案(一)—方案调研

一、概述 在业务系统中&#xff0c;保证系统稳定至关重要&#xff0c;直接影响线上业务稳定和性能。测试工作作为保证生产质量的最后一关&#xff0c;扮演者重要的角色。全链路压测是一种重要的测试工具和手段。可以解决系统中多环节多节点无法全流程打满流量的痛点问题&a…