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

news2024/11/19 2:18:39

 目录

 前言

一、数据绑定

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)

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

分享一张壁纸:

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

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

相关文章

鸿蒙应用开发学习:改进小鱼动画实现按键一直按下时控制小鱼移动和限制小鱼移出屏幕

一、前言 近期我在学习鸿蒙应用开发&#xff0c;跟着B站UP主黑马程序员的视频教程做了一个小鱼动画应用&#xff0c;UP主提供的小鱼动画源代码仅仅实现了移动组件的功能&#xff0c;还存在一些问题&#xff0c;如默认进入页面是竖屏而页面适合横屏显示&#xff1b;真机测试发现…

LeeCode前端算法基础100题(20)找出字符串中第一个匹配项的下标

一、问题详情: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack = "sadbutsad", needle = "s…

MySQL面试题 | 07.精选MySQL面试题

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

Pushmall智能AI数字名片— —SCRM客户资源管理系统

推贴数字AI名片说明&#xff1a; **Pushmall智能AI数字名片&#xff1a;**基于靠谱人脉的地理位置服务&#xff0c;资源查询&#xff0c;数字名片定制服务、企业名片&#xff1a;相互引荐、提供需求&#xff1b;建人脉群、客户群&#xff0c;及简介、短视频、宣传文档、电子图…

Flutter使用stack来实现悬浮UI

文章目录 stack特性示例 stack特性 在Flutter中&#xff0c;你可以使用Stack和Positioned来创建悬浮 UI。Stack允许你将多个小部件叠放在一起&#xff0c;而Positioned则用于定位小部件在Stack中的位置。 示例 以下是一个简单的示例&#xff0c;演示如何创建一个悬浮按钮&am…

力扣每日一练(24-1-14)

做过类似的题&#xff0c;一眼就是双指针&#xff0c;刚好也就是题解。 if not nums:return 0p1 0 for p2 in range(1, len(nums)):if nums[p2] ! nums[p1]:p1 1nums[p1] nums[p2]return p1 1 根据规律&#xff0c;重复的数字必定相连&#xff0c;那么只要下一个数字与上一…

Codeforces Round 779 (Div. 2) D2. 388535(思维题 二进制性质/trie树上最大最小异或)

题目 t(t<1e5)组样例&#xff0c;每次给定l,r(0<l<r<2^17) 和r-l1个数ai&#xff0c;新序列是被[l,r]这些数异或上同一个x得到的&#xff0c; 求出x&#xff0c;有多个输出任意一个即可 思路来源 官方题解 洛谷题解 Educational Codeforces Round 157 (Rated…

redis中的string相关的部分命令

redis命令手册 redis中文官网查看文档 挨个进行输出调试 Redis Setnx 命令 Redis Getrange 命令 Redis Mset 命令 redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World" OK redis 127.0.0.1:6379> GET key1 "Hello" redis 127.0.0.1:…

(菜鸟自学)搭建虚拟渗透实验室——安装Kali Linux

安装Kali Linux Kali Linux 是一种基于 Debian 的专为渗透测试和网络安全应用而设计的开源操作系统。它提供了广泛的渗透测试工具和安全审计工具&#xff0c;使安全专业人员和黑客可以评估和增强网络的安全性。 安装KaliLinux可参考我的另一篇文章《Kali Linux的下载安装以及基…

大模型实战05——LMDeploy大模型量化部署实践

大模型实战05——LMDeploy大模型量化部署实践 1、大模型部署背景 2、LMDeploy简介 3、动手实践环节——安装、部署、量化 注 笔记内容均为截图 笔记课程视频地址&#xff1a;https://www.bilibili.com/video/BV1iW4y1A77P/?spm_id_from333.788&vd_source2882acf8c823ce…

等保测评流程是什么样的?测评周期多久?

等保测评流程是什么样的&#xff1f;测评周期多久&#xff1f; 等保测评一般分成五个阶段&#xff0c;定级、备案、测评、整改、监督检查。 1.定级阶段 针对用户的信息系统有等保专家进行定级&#xff0c;一般常见的系统就是三级系统或者是二级系统。在这里有一个小的区分&am…

新年福利大放送-UDS学习宝典

新年福利大放送-UDS学习宝典 小T年末总结 新年伊始&#xff0c;小T首先给大家送上真挚的祝福&#xff1a; 祝大家新年快乐&#xff0c;心想事成&#xff0c;财源广进&#xff0c;永远活出自己最舒服自在的状态&#xff01; 在过去的一年中感谢小伙伴对小T作品的认可与支持&…

通过Wireshark抓包分析谈谈DNS域名解析的那些事儿

原创/朱季谦 本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的&#xff0c;毕竟&#xff0c;纸上得来终觉浅&#xff0c;绝知此事要躬行。 一、域名与IP地址 当在浏览器上敲下“www.baidu.com”时&#xff0c;一键回车&#xff0c;很快&#x…

财务管理软件,用表格导出账目明细

不论是工资收入&#xff0c;还是日常花销&#xff0c;每一笔钱都需要我们认真对待。然而&#xff0c;许多人在财务管理上仍然采用传统的纸质记账方式&#xff0c;这不仅容易丢失数据&#xff0c;还难以实现财务的统一管理。为此&#xff0c;我为大家推荐一款简单好用的记账软件…

基于深度学习的多类别电表读数识别方案详解

基于深度学习的多类别电表读数识别方案详解 多类别电表读数识别方案详解项目背景项目难点最终项目方案系列项目全集&#xff1a; 安装说明环境要求 数据集简介数据标注模型选型明确目标&#xff0c;开始下一步的操作 检测模型训练模型评估与推理番外篇&#xff1a;基于目标检测…

linux Tcp总结

Tcp连接建立时的影响因素 在Client发出SYN后&#xff0c;如果过了1秒 &#xff0c;还没有收到Server的响应&#xff0c;那么就会进行第一次重传&#xff1b;如果经过2s的时间还没有收到Server的响应&#xff0c;就会进行第二次重传&#xff1b;一直重传tcp_syn_retries次。 对…

无公网ip如何随时随地远程查看本地群晖NAS存储的文件资源

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

python -- pyQt5中 样式设置

一、父控件设置样式表后对子控件产生影响&#xff0c;控制styleSheet的作用范围 https://blog.csdn.net/qq_31073871/article/details/90288625 QFrame 作为容器&#xff0c;放入其他多种部件&#xff0c;里面的边框都生效 在类名后面用 #号串接变量名&#xff0c;子控件不…

浅学Linux之旅 day1 学习路线及计算机入门知识介绍

我不要做静等被掀起的轻波&#xff0c;我要生起翠绿的斑驳 偶尔过季的遭遭人事化长风拂过 思绪撕碎点燃了火 ——24.1.14 一、Linux学习路线 ①计算机入门知识介绍 ②Linux系统概述 ③Linux系统的安装和体验 ④Linux的网络配置和连接工具 ⑤Linux的目录结构 ⑥Linux的常用命令 …

Qt/QML编程学习之心得:小键盘keyboard(36)

小键盘对于qml应用是经常用到的,在qml里面,就如一个fileDialog也要自己画一样,小键盘keyboard也是要自己画的,对于相应的每个按键的clicked都要一一实现的。 这里有一个示例: 代码如下: import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Window 2.0 im…