微信小程序wxml的数据和事件的绑定,以及条件和列表的渲染

news2024/11/16 4:43:58

文章目录

    • 1.数据绑定的基本原则
        • 在data中定义页面的数据
    • 2.事件绑定
      • bingtap的语法格式:
      • 在事件处理函数中为data中的数据赋值
      • 事件传参
      • bindinput的语法格式
        • 实现文本框和data之间的数据同步
          • 1.定义数据
          • 2.渲染结构
          • 3.美化样式
          • 4.绑定input事件处理函数
    • 3.条件渲染
          • hidden
          • wx:if与hidden的对比
    • 4.列表渲染
      • 手动指定索引和当前项的变量名*(了解即可)
      • wx:key的使用

1.数据绑定的基本原则

  1. 在data中定义数据
  2. 在wxml中使用数据

在data中定义页面的数据

在页面对应的.js文件中,把数据定义到data对象中即可

Page({
	data:{
		//字符串类型的数据
		info:'init data',
		//数组类型的数据
		msgList:[{msg:'hello'},{msg:'world'}]
	}
})

Mustache语法的格式
把data中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可。语法格式为:

<view> {{要绑定的数据名称}} </view>

Mustache语法的应用场景

  • 绑定内容
  • 绑定属性(如图片的src属性)
  • 运算(三元运算,算术运算等)

绑定属性案例

Page({
	data:{
		info:'https://xiaoji.img',
	}
})
<image src="{{info}}"></image>

三元运算案例

Page({
	data:{
		randomNum:Math.random() * 10, //生成10以内的随机数
	}
})
<view>{{ randomNumber >=5 ? '随机数大于五' : '随机数小于五'}}</view>

2.事件绑定

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

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

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

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

上面加粗的可以重点关注一下
target和currentTarget的区别:
target是触发该事件的源头组件,而currentTarget则是当前事件所绑定的组件(类似html的事件委托,currentTarget为父组件,target就是子组件,子组件向外冒泡到父组件身上,父组件身上绑定了事件,此时这个事件的e.target就是内部子组件,e.currentTarget就是当前的绑事件的父组件)
在这里插入图片描述

bingtap的语法格式:

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

  1. 通过bingtap,可以为组件绑定tap触摸事件,语法如下:
<button type='primary' bindtap='btnTapHandler'>打印事件对象</button>
  1. 在页面的.js文件中定义对应的事件处理函数,事件参数通过形参event(一般简写成e),来接收:
Page({
	btnTapHandler(e){
		//上面按钮的tap事件处理函数
		console.log(e) //事件参数对象 e
	}
})

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

通过调用this.setData(dataObject)方法,可以给页面data中的数据重新赋值,示例如下:

//页面中的.js文件
Page({
	data:{
		count:0
	},
	//修改count的值
	changeCount(){
		this.setData({
			count:this.data.count+1
		})
	}
})
<button type='primary' bindtap='changeCount'>+1</button>

事件传参

小程序中的事件比较特殊,不能在绑定事件的同时为事件处理函数传递参数,例如,下面代码将不能正常工作:

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

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

可以为组件提供data-自定义属性传参,其中代表的是参数的名字,示例代码如下(里面的{{}}不能省略,不然得到的参数就是一个普通的字符串了):

<button type=""primary bindtap='btnHandler' data-info="{{234}}">事件传参</button>

最终:

  • info会被解析为参数的名字
  • 数值⒉会被解析为参数的值

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

btnHandler(event){
	//dataset 是一个对象,包含了所有通过data-* 传递过来的参数项
	console.log(event.target.dataset)
	//通过dataset 可以访问到具体的值
	console.log(event.target.dataset.info)
}

bindinput的语法格式

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

  1. 通过binginput,可以为文本框绑定输入事件
<input bindinput="inputHandler"></input>
  1. 在页面的.js文件中,定义事件处理函数
inputHandler(e){
	//e.detail.value 是变化过后,文本框最新的值
	console.log(e.detail.value)
}

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

实现步骤:

  1. 定义数据
  2. 渲染结构
  3. 美化样式
  4. 绑定input事件处理函数
1.定义数据
Page({
	data:{
		msg:'你好'
	}
})
2.渲染结构
<input value="{{msg}}" bindinput="inputHandler"></input>
3.美化样式
input{
	border:1px solid #eee;
	padding:5px;
	margin:5px;
	border-radius:3px;
}
4.绑定input事件处理函数
inputHandler(e){
	//e.detail.value 是变化过后,文本框最新的值
	//console.log(e.detail.value)
	this.setData({
		msg:e.detail.value
	})
}

3.条件渲染

在小程序中,使用wx:if="{{condition}}”来判断是否需要渲染该代码块:

<view wx:if="condition">True</input>

也可以用wx:elif 和 wx:else来添加else 判断:

<view wx:if="{{type===1}}"></input>
<input wx:elif="{{type===2}}"></input>
<view wx:else>保密</view>

结合block使用wx:if

如果要一次性控制多个组件的展示与隐藏,可以使用一个< block> < /block>标签将多个组件包装起来,并在< block>标签上使用wx:if控制属性,示例如下:

<block wx:if="{{true}}">
	<view>view1</view>
	<view>view2</view>
</block>

注意:< block>并不是一个组件,它只是一个包裹性质的容器,不会在页面中做任何渲染(也可以使用其他的块包裹,但是其他的块会被渲染到页面上)

hidden

在小程序中,直接使用hidden="{{condition}}"也能控制元素的显示与隐藏

<view hidden="{{condition}}"> 条件为true隐藏,false显示 </view>
wx:if与hidden的对比
  1. 运行方式不同
    • wx:if以动态创建和移除元素的方式,控制元素的显示和隐藏
    • hidden以切换样式的方式(display:none/block),控制元素的显示与隐藏
  2. 使用建议
    • 频繁切换时,建议使用hidden
    • 控制条件复杂时,建议使用wx:if搭配wx:elif、wx:else进行展示与隐藏的切换

4.列表渲染

通过wx:for可以根据指定的数组,循环渲染重复的组件结构,语法示例如下:

<view wx:for="{{array}}">
	索引是:{{index}} 当前项是:{{item}}
</view>

默认情况下,当前循环项的索引用index表示;当前循环项用item表示

手动指定索引和当前项的变量名*(了解即可)

  • 使用wx:for-index可以指定当前循环项的索引的变量名
  • 使用wx:for-item可以指定当前项的变量名
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
	索引是:{{idx}} 当前项是:{{itemName}}
</view>

wx:key的使用

类似于Vue列表渲染中的:key,小程序在实现列表渲染时,也建议为渲染出来的列表项指定唯一的 key值,从而提高渲染的效率,示例代码如下:

//data 数据
data:{
	userlist:[
		{id:1,name:"小红"},
		{id:2,name:"小黄"},
		{id:3,name:"小白"}
	]
}


//wxml结构,wx:key里面不需要Mustache语法,不然报错
<view wx:for="{{userlist}}" wx:key="id">{{item.name}}</view>

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

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

相关文章

数据库 表设计 MySQL

表设计 约束 为了保证入库数据的合理性&#xff0c;添加的各种规则。 约束的分类 准备测试用的表格&#xff1a; CREATE TABLE emp ( id INT, -- 员工id&#xff0c;主键且自增长 ename VARCHAR(50), -- 员工姓名&#xff0c;非空且唯一 joindate DATE, -- 入职日期&…

【uniapp】渲染列表数据删除项导致每项数据重置的问题解决方案

开发uniapp项目&#xff0c;使用的是JavaScript Vue写法&#xff0c;操作wList数组列表更新的时候&#xff0c;如果每一项都带input 或 radio组件&#xff0c;要操作移除的话&#xff0c;那么组件的输入数据会被清除重置&#xff0c;若不希望这样&#xff0c;那应该怎么做才好呢…

设计模式相关内容介绍—软件设计原则(六个)

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 目录 1.开闭原则 2.里氏代替原则 3.依赖倒转原则 4.接…

dvwa中的文件包含攻击

环境&#xff1a;dvwa: 192.168.11.135 dvwa版本&#xff1a; Version 1.9 (Release date: 2015-09-19)kail机器&#xff1a;192.168.11.156一、什么是文件包含漏洞?为简化代码&#xff0c;会把重复的code内容单独写到一个页面文件&#xff0c;然后再需要调用重复内容的页面中…

C语言:初识C语言

目录前言1. 什么是c语言呢2. 第一个c语言程序2. 数据类型3. 变量和常量3.1 变量3.1.1 变量的定义3.1.2 变量的分类3.1.3 变量的使用3.1.4 变量的作用域和生命周期3.2 常量4. 字符串、转义字符、注释4.1 字符串4.2 转义字符4.3 注释5. 选择语句6. 循环语句7. 函数8. 数组9. 操作…

学习笔记——keep-alive缓存组件,再次返回组件data数据重置

前言&#xff1a;使用keep-alive缓存组件&#xff0c;当再次返回该组件后&#xff0c;希望其组件中的数据或状态&#xff0c;保持上次离开该组件时的情况。 一、当前组件树 希望缓存HomeMain组件的状态。 二、错误处理 我在HomeMain的祖先组件HomeLayout中&#xff0c;写了如下…

sqlplus 连接数据库

终端直连 Oracle 数据库 ORA-12162 错误 出于各种网络原因&#xff0c;无法直连数据库&#xff0c;但又必须查询数据库数据 我们只能选择直连数据库的服务器 然后通过 sqlplus 连接 Oracle 从配置文件里获取这样一段信息 urljdbc:oracle:thin:192.168.1.3:1521:testdb use…

【SpringCloud08】SpringCloud Consul服务注册与发现

1.Consul简介 1.1是什么 官网 Consul 是一套开源的分布式服务发现和配置管理系统&#xff0c;由 HashiCorp 公司用Go 语言开发 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位…

基于MPLS-V**多分部互访的ensp企业网络规划与设计_ensp综合实验

作者&#xff1a;BSXY_19计科_陈永跃BSXY_信息学院注&#xff1a;未经允许禁止转发任何内容基于MPLS-V**多分部互访的ensp企业网络规划与设计_ensp综合实验前言及技术/资源下载说明&#xff08; **未经允许禁止转发任何内容** &#xff09;插曲&#xff1a;基于eNSP中大型校园/…

卡特加特数字中控主机,数字家庭控制中心!没它智能家居就是智障!

数字中控主机是数字家庭的核心&#xff0c;承担着“协调各方、总揽全局”的作用&#xff0c;是打造未来数字家庭空间必不可少的设备。区别于传统家居智能&#xff0c;它真正意义上告别了过去以设备为中心的架构&#xff0c;而是以人的个性化需求为中心&#xff0c;以数据作为资…

2020统考真题-距离最小三元组

2020年统考真题 定义三元组$ (a,b,c)$ &#xff08; a,b,c 均为正数&#xff09;的距离 D∣a−b∣∣b−c∣∣c−a∣D|a−b||b−c||c−a|D∣a−b∣∣b−c∣∣c−a∣ 。给定 3个非空整数集合 S1 、 S2 和 S3 &#xff0c;按升序分别存储在 3 个数组中。请设计一个尽可能高效的算…

蓝队攻击的四个阶段(三)

目录 一&#xff0c; 专业技能储备 1.工具开发技能 2.漏洞挖掘技能 3.代码调试技能 4.侦破拓展技能 二&#xff0c;目标网情搜集 1 何为网情搜集 2. 网情搜集的主要工作 三&#xff0c; 网情搜集的途径 1.专业网站 2.专业开发资源网站 3.目标官网 一&#xff0c; 专…

算法训练营 day17 二叉树 平衡二叉树 二叉树的所以路径 左叶子之和

算法训练营 day17 二叉树 平衡二叉树 二叉树的所以路径 左叶子之和 平衡二叉树 110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每…

osg fbo(五) 通过shader计算纹理坐标并采样

在前边几节&#xff0c;纹理坐标数组是在生成geometry前指定的。 这里在shader里计算&#xff0c; 一&#xff0c;注释掉geometry中的纹理坐标 //osg::ref_ptr<osg::Vec2Array> texCoord new osg::Vec2Array; //texCoord->push_back(osg::Vec2(0.0, 0.0)); //texCoo…

1.13UART串口实验

UART总线&#xff1a; 异步全双工串行总线。用于芯片与外设之间的通信 UART通信协议&#xff1a; 空闲状态处于高电平 起始位&#xff1a;串口通信的起始标志 数据位&#xff1a;传输数据时先从低位开始传输&#xff0c;再传输高位 奇偶校验位&#xff1a; 奇校验&#x…

MacOS 系统中如何使用EF Core进行数据迁移?

原有 笔者最近在使用MacOS系统做asp.net core mvc项目开发。可是一直习惯了使用宇宙最强大的vs2019工具。突然换到苹果系统就感觉什么都是问题了。现在我将遇到该问题的解决方案做下记录&#xff0c;方便自己也是方便别的同学快速的解决问题。 发现有坑 其实最开始我也是翻阅…

RocketMQ 存储优化技术 解析——图解、源码级解析

&#x1f34a; Java学习&#xff1a;Java从入门到精通总结 &#x1f34a; 深入浅出RocketMQ设计思想&#xff1a;深入浅出RocketMQ设计思想 &#x1f34a; 绝对不一样的职场干货&#xff1a;大厂最佳实践经验指南 &#x1f4c6; 最近更新&#xff1a;2023年1月13日 &#x…

Django 后端没有接收到前端anxios的 post 内容

前端使用 vue 无论怎样 post 后端都说没有接收到值&#xff0c;&#xff08;后端接口正确&#xff09; 寻找原因&#xff1a; 1、前端查看自己的请求类型 Content-Type:application/json 我们的请求是这样的&#xff1a; axios({method:post,url:/video/upload,data:{"…

RedHat6配置本地yum源(最新超详细过程)

一、环境准备 挂载iso的镜像文件在CD/DVD驱动器上&#xff0c;需要确保&#xff0c;已连接已打开&#xff0c;且CD/DVD上的介质符合当前操作系统的版本。 挂载本地光盘到系统 在“编辑设置”——>“硬件”——>“CD/DVD驱动器”里指定操作系统的ISO镜像文件 光驱挂载…

web性能测试:Lighthouse测试实践

一工具简介 Lighthouse是Google开源的一个自动化工具&#xff0c;它可以搜集多个Web网页性能指标&#xff0c;分析Web应用的性能并生成报告&#xff0c;为开发人员进行性能优化提供了参考方向。1工作原理•Driver&#xff08;驱动&#xff09;—— 通过 Chrome Debugging Proto…