微信小程序(4)- 事件系统和模板语法

1. 事件系统

1.1 事件绑定和事件对象

小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过 on 的方式绑定事件,也没有 click 等事件,小程序中绑定事件使用 bind 方法,click 事件也需要使用 tap 事件来进行代替,绑定事件的方式有两种:
第一种方式:bind:事件名,bind 后面需要跟上冒号,冒号后面跟上事件名,例如: <view bind:tap=“fnName”></view>
第二种方式:bind事件名,bind 后面直接跟上事件名,例如: <view bindtap=“fnName”></view>

事件处理函数需要写到 .js 文件中,在 .js 文件中需要调用小程序提供的 Page 方法来注册小程序的页面,我们可以直接在 Page 方法
中创建事件处理函数。

1.2 事件分类以及阻止事件冒泡

事件分为 冒泡事件 和 非冒泡事件:

  • 冒泡事件:当一个组件的事件被触发后,该事件会向父节点传递。
  • 非冒泡事件:当一个组件的事件被触发后,该事件不会向父节点传递。

使用 bind 绑定的事件,会触发事件冒泡,如果想阻止事件冒泡,可以使用 catch 来绑定事件。

1.3 事件传参-data-*自定义数据

事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参。

在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在事件处理函数中获取这些自定义数据,从而完成业务逻辑的开发。
在组件上 通过 data-* 的方式 定义需要传递的数据,其中 * 是自定义的属性,例如:<view data-id=“100” bindtap=“handler” />,然后通过事件对象进行获取自定义数据。

注意事项:

  1. event.target 是指事件触发者, event. currentTarget 是指事件绑定者。
  2. 使用 data- 方法传递参数的时候,多个单词由连字符 - 连接,连字符写法会转换成驼峰写法。
  3. 使用 data- 方法传递参数的时候,而大写字符会自动转成小写字符。

1.4 事件传参-mark 自定义数据

小程序进行事件传参的时候,除了使用 data-* 属性传递参数外,还可以 使用 mark 标记传递参数。
mark 是一种自定义属性,可以在组件上添加,用于来识别具体触发事件的 target 节点。同时 mark 还可以用于承载一些自定义数据。
在组件上使用 mark:自定义属性 的方式将数据传递给事件处理函数,例如:<view mark:id=“100” bindtap=“handler” />,然后通过事件对象进行获取自定义数据。

mark 和 data-* 很相似,主要区别在于:

  • mark 包含从触发事件的节点到根节点上所有的 mark: 属性值
  • currentTarget.dataset 或者 target.dataset 只包含事件绑定者 或者 事件触发者那一个节点的 data-* 值。

2. WXML 语法

2.1 声明和绑定数据

小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义
在将数据声明好以后,在 WXML 使用 Mustache 语法(双大括号 {{ }})将变量包起来,从而将数据绑定
{{ }} 内部可以做一些简单的运算,支持如下几种方式:

  1. 算数运算
  2. 三元运算
  3. 逻辑判断
  4. 其他…

注意事项:在 {{ }} 语法中,只能写表达式,不能写语句,也不能调用 js 相关的方法。

2.2 setData() 修改数据

小程序中修改数据不推荐通过赋值的方式进行修改,通过赋值的方式修改数据无法改变页面的数据。
而是要通过调用 setData() 方法进行修改,setData() 方法接收对象作为参数, key 是需要修改的数据,value 是最新的值。
setData() 方法有两个作用:

  1. 更新数据
  2. 驱动视图更新

2.3 setData()

1. 修改对象类型数据
  1. 新增 单个 / 多个属性
  2. 修改 单个 / 多个属性
  3. 删除 单个 / 多个 属性
2. 修改数组类型数据
  1. 新增数组元素
  2. 修改数组元素
  3. 删除数组元素

2.4 简易双向数据绑定

在 WXML 中,普通属性的绑定是单向的,例如:<input value="{{value}}" />
如果希望用户输入数据的同时改变 data 中的数据,可以借助简易双向绑定机制。在对应属性之前添加 model: 前缀即可:
例如 <input model:value="{{value}}" />

注意事项:简易双向绑定的属性值如下限制:

  1. 只能是一个单一字段的绑定,例如:错误用法:<input model:value="值为 {{value}}" />
  2. 尚不能写 data 路径,也就是不支持数组和对象,例如:错误用法:<input model:value="{{ a.b }}" />

2.5 列表渲染-基本使用

列表渲染:就是指通过循环遍历一个数组或对象,将其中的每个元素渲染到页面上。
在组件上使用 wx:for 属性绑定一个数组或对象,既可使用每一项数据重复渲染当前组件,每一项的变量名默认为 item,下标变量名默认为 index

在使用 wx:for 进行遍历的时候,建议加上 wx:key 属性, wx:key 的值以两种形式提供:

  1. 字符串:代表需要遍历的 array 中 item 的某个属性,该属性的值需要是列表中唯一的字符串或数字,且不能动态改变
  2. 保留关键字 *this 代表在 for 循环中的 item 本身,当 item 本身是一个唯一的字符串或者数字时可以使用。

注意事项:

  1. 如果不加 wx:key,会报一个 warning, 如果明确知道该列表是静态,即以后数据不会改变,或者不必关注其顺序,可以选择忽略。
  2. 在给 wx:key 添加属性值的时候,不需要使用双大括号语法,直接使用遍历的 array 中 item 的某个属性。

2.6 列表渲染-进阶用法

  1. 如果需要对默认的变量名和下标进行修改,可以使用 wx:for-itemwx:for-index
    • 使用 wx:for-item 可以指定数组当前元素的变量名。
    • 使用 wx:for-index 可以指定数组当前下标的变量名。
  2. 将 wx:for 用在<block /> 标签上,以渲染一个包含多个节点的结构块
    • <block /> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。
    • <block /> 标签在 wxml 中可以用于组织代码结构,支持列表渲染、条件渲染等。

2.7 条件渲染

条件渲染主要用来控制页面结构的展示和隐藏,在微信小程序中实现条件渲染有两种方式:

  1. 使用 wx:if、wx:elif、wx:else 属性组
  2. 使用 hidden 属性

wx:if 和 hidden 二者的区别:

  1. wx:if :当条件为 true 时将结构展示出来,否则结构不会进行展示,通过 移除/新增节点 的方式来实现。
  2. hidden :当条件为 true 时会将结构隐藏,否则结构会展示出来,通过 display 样式属性 来实现的。

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

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

相关文章

抖店货源怎么找?这几个货源渠道,我都替你整理出来了!

我是电商珠珠 在开通抖店之后&#xff0c;怎么找货源成为了新手的致命要点。货源找不好&#xff0c;就会导致店铺的流量曝光不够。 抖店货源究竟该怎么找呢&#xff0c;今天我就来给大家说个明白。 1、货源网站 比较常规的方式&#xff0c;就是去货源网站上去找&#xff0c…

LeetCode //C - 131. Palindrome Partitioning

131. Palindrome Partitioning Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s. Example 1: Input: s “aab” Output: [[“a”,“a”,“b”],[“aa”,“b”]] Example 2…

达梦数据库——集群守护进程各状态详解

守护进程&#xff08; dmwatcher &#xff09;是 DM 数据守护系统不可或缺的核心部件&#xff0c;是数据库实例和 监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息&#xff0c;接收本地守护进程的消 息和命令&#xff1b;监视器&#xff08; dmmonitor &#…

爬某网站延禧宫率第一集视频

import requests import re from tqdm import tqdm # 网址链接&#xff1a;https://v.ijujitv.cc/play/24291-1-1.html url https://v6.1080pzy.co/20220801/urxniJCN/hls/index.m3u8 headers {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl…

BUUCTF crypto做题记录(9)新手向

一、rsa2 得到题目代码如下&#xff1a; N 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170…

【Spring连载】使用Spring Data的Repositories----从聚合根(Aggregate Roots)发布事件

【Spring连载】使用Spring Data的Repositories----从聚合根Aggregate Roots发布事件 由存储库管理的实体是聚合根。在域驱动设计应用程序中&#xff0c;这些聚合根通常发布域事件。Spring Data提供了一个名为DomainEvents的注解&#xff0c;你可以在聚合根的方法上使用该注解&a…

Linux调用可执行程序:system()函数和execl函数

system()函数&#xff1a; system()函数是一个在C/C编程语言中的库函数&#xff0c;用于在操作系统中执行命令。 函数声明如下&#xff1a; int system(const char *command);该函数接受一个指向以空字符结尾的字符串的指针作为参数&#xff0c;该字符串包含要执行的命令。函…

吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 引入——改进下需求预测模型ReLU函数(整流线性单元 rectified linear unit&#xff09;线性激活函数(linear activation function)激活函数的选择实现方式为什么需要激活函数 到现在…

【MATLAB】 LMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 LMD分解算法 LMD (Local Mean Decomposition) 分解算法是一种信号分解算法&#xff0c;它可以将一个信号分解成多个局部平滑的成分&#xff0c;并且可以将高频噪声和低频信号有效地分离出来。LMD 分解算…

283.【华为OD机试真题】伐木工(动态规划—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-伐木工二.解题思路三.题解代码Python题解代码J…

【IDEA】java 项目启动偶现Kotlin 版本问题 error:Kotlin:module was

一、问题描述&#xff1a; error:Kotlin:module was compiled with an incompatible version of kotlin the binary version of its metadata is二、问题原因&#xff1a; jar包版本冲突 三、解决方式&#xff1a; 1、Rebuild Project&#xff08;推荐☆&#xff09; 重新构…

【Spring Cloud】高并发带来的问题及常见容错方案

文章目录 高并发带来的问题编写代码修改配置压力测试修改配置&#xff0c;并启动软件添加线程组配置线程并发数添加Http取样配置取样&#xff0c;并启动测试访问message方法观察效果 服务雪崩效应常见容错方案常见的容错思路常见的容错组件 总结 欢迎来到阿Q社区 https://bbs.c…

Vue+SpringBoot打造高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

Linux浅学笔记04

目录 Linux实用操作 Linux系统下载软件 yum命令 apt systemctl命令 ln命令 日期和时区 IP地址 主机名 网络传输-下载和网络请求 ping命令 wget命令 curl命令 网络传输-端口 进程 ps 命令 关闭进程命令&#xff1a; 主机状态监控命令 磁盘信息监控&#xff1a…

el-table样式问题:如何修改element-ui表格中按钮悬浮显示但是被el-table溢出隐藏的问题?

最近在写elment-ui样式表格中遇到了溢出隐藏的问题 修改前 修改后 是由于el-table__body-wrapper为 overflow&#xff1a;hidden导致的 解决方式&#xff1a; .el-table__body-wrapper {overflow: visible !important; } //或者 /deep/.el-table__body-wrapper {overflow: v…

服务器防漏扫

什么是漏扫&#xff1f; 漏扫是漏洞扫描的简称。漏洞扫描是一种安全测试方法&#xff0c;用于发现计算机系统、网络或应用程序中的潜在漏洞和安全弱点。通过使用自动化工具或软件&#xff0c;漏洞扫描可以检测系统中存在的已知漏洞&#xff0c;并提供相关的报告和建议&#xf…

超详细的Python中与迭代相关的函数

下面要介绍的enumerate、range、zip、reversed、sorted属于Python内置的函数或者类别&#xff0c;返回的对象都可通过迭代方法访问。 一、enumerate函数 1.语法&#xff1a;enumerate(iterable, start0) 1)该函数Python 2.3. 以上版本可用&#xff0c;2.6 添加 start 参数&a…

基于Springboot + Vue 母婴商城系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

基于Java SSM框架实现家庭食谱管理系统项目【项目源码+论文说明】

基于java的SSM框架实现家庭食谱管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个家庭食谱管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

自定义神经网络一之Tensor和神经网络

文章目录 前言Tensor神经网络深度神经网络DNN卷积神经网络CNN卷积神经网络有2大特点 循环神经网络RNN残差网络ResNetTransformer自我注意力机制并行效率 总结 前言 神经网络是AI界的一个基础概念&#xff0c;当下火热的神经网络例如RNN循环神经网络或者CNN卷积神经网络&#x…