微信小程序31~40

1.事件绑定和事件对象

小程序中绑定事件没有on 方式,也没有click,小程序中可以用bind方法,click事件也需要用tap事件来进行代替。
绑定事件分为两种:

  1. bind:事件名,eg:
<view bind:tap="fnName"><view/>
  1. bind事件名,eg:
<view bindtap="fnName"><view/>

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

type的三个属性可以改变按钮的样式:

1. primary 绿色底按钮
<button type="primary">绑定事件</button>
2. warn红色按钮
<button type="warn">绑定事件</button>
3. default绿色字按钮
<button type="default">绑定事件</button>小按钮
<button type="primary" size="mini">绑定事件</button>

在小程序中,input输入框默认没有边框,需要自己添加样式

wxml页面
<input type="text" bindinput="getInputVal"/>
Page页面
getInputVal (event) {console.log(event);}
getInputVal (event) {console.log(event.detail.value);

在这里插入图片描述

2.事件的分类和组织事件冒泡

事件分为冒泡事件和非冒泡事件
冒泡事件:一个组件的事件被触发后,该事件会向父节点传递

<view class="catch" bind:tap="parentHandler"><button bind:tap="btnHandler">按钮</button>
</view>

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

<view class="catch" bind:tap="parentHandler">
<button catch:tap="btnHandler">按钮</button>
</view>

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

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

事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程就是。
在组件上通过data-*的方式定义需要传递的数据,*是自定义的数据

<view data-id="100" bindtap="handler"/>

然后通过事件对象进行获取自定义数据

<button bind:tap="btnHandler" data-id="1" data-name="tom">按钮</button>
//currentTarget事件绑定者,即那个组件绑定了当前事件处理函数
//target事件触发者,即那个组件触发了当前事件处理函数
//currentTarget和target都是按钮,因为是按钮绑定的事件处理函数,同时触发,用谁获取数据都行btnHandler (event) {console.log(event.currentTarget.dataset.id);console.log(event.target.dataset.name);},
<view bind:tap="parentHandler" data-ppid="1" data-ppname="tom"><button data-id="1" data-name="tom">按钮</button>
</view>
//currentTarget事件绑定者:view
//target事件触发者:button
//想要获取view的数据用currentTarget,想要获取button的数据用target
parentHandler (event) {console.log(event);}

在这里插入图片描述

4.事件传参-mark自定义数据

mark用于识别具体触发事件的target节点,还可以承载一些自定义数据。

<view mark:id="100" bindtap="handler"/>
<view bind:tap="parentHandler" mark:ppid="1" mark:ppname="tom"><button mark:id="1" mark:name="tom">按钮</button>
</view>
//可以获取到触发事件的节点和父节点上所有的mark数据
parentHandler (event) {console.log(event);}
5.wxml语法-声明和绑定数据

小程序页面中使用的数据要在Page()方法的data对象中声明定义
数据声明好后,在WXML使用Mustache语法({{}})将变量包起来,从而将数据绑定
在{{ }}内部可以做一些简单的运算,如:算数运算、三元运算、逻辑判断
在{{ }}语法中,只能写表达式,不能写语句,也不能调用js相关的方法。

<view>{{ school }} </view>
<view>{{ obj.name }} </view><!-- 绑定属性值 ,要动态绑定一个变量时,属性值要用双大括号包裹-->
<view id="{{id}} ">绑定属性值</view>
<!-- 如果属性值是布尔值,也要用双大括号包裹 -->
<checkbox value="{{ isCheck }}"/>

在这里插入图片描述

6.setData()修改数据

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

  1. 更新数据
  2. 驱动视图更新
data: {num: 1}, updatenum () {console.log(this.data.num);this.setData({//key:是要更新的数据//value:是最新的值num:this.data.num + 1})}
7.setData()修改对象类型的数据

将key写成数据路径的方式a.b.c
‘userInfo.name’: ‘tom’,

<view>{{ userInfo.name }} </view>
<view>{{ userInfo.age }} </view>
<button bind:tap="updateUserInfo">修改对象类型数据</button>updateUserInfo () {// 新增单个或多个属性//修改同理this.setData({'userInfo.name': 'tom','userInfo.age': '18'})}

优化:用ES6提供的展开运算符或者 Object.assign()

ES6提供的展开运算符const userInfo = {...this.data.userInfo,name: 'jerry',age: 10},this.setData({userInfo})  
Object.assign()方法
const userInfo = Object.assign(this.data.userInfo, {name: 'jerry'}, { age: 18 })this.setData({userInfo})

删除对象类型的数据

//删除单个属性delete this.data.userInfo.age//此时数据已经更新this.setData({//要驱动视图更新userInfo: this.data.userInfo})//删除多个属性
//用rest剩余参数const { age,test, ...rest } = this.data.userInfothis.setData({userInfo: rest})
8.修改数组类型数据

更改list,新增数组元素

第一种方法
updateList () {this.data.list.push(4)this.setData({list: this.data.list})}第二种方法updateList () {const newList = this.data.list.concat(4)this.setData({list: newList})}第三种方法
updateList () {const newList = [...this.data.list, 4]this.setData({list: newList})}

修改数组元素

this.setData({
//将数组的第一个元素中的name改为jerry'list[0].name': 'jerry'})

删除数组元素

第一种
this.data.list.splice(1,1)this.setData({list: this.data.list})第二种const newList = this.data.list.filter(item => item !== 2)this.setData({list: newList})
9.建议双向数据绑定

数据能影响页面,页面也能影响数据

<input model:value="{{value}}" />

注意事项:
只能是单一字段绑定,不能拼接
不能写data路径,也不支持数组和对象

10.列表渲染-基本使用

指通过循环遍历一个数组或对象,将其中的每个元素渲染到页面上。
在组件上用wx:for绑定数组或对象,重复渲染当前组件
每一项的变量名默认为item,下表变量名默认为index
要加上wx:key属性,一两种形式提供:

  1. 字符串
  2. 保留关键字*this
    在这里插入图片描述
    注意事项:
    如果不加wx:key会报错
    在给wx:key加属性值时,不用双大括号语法,直接用遍历的array中item的某个属性
<view wx:for="{{ fruitList }}" wx:key="id">{{ item.name }} </view><view wx:for="{{ fruitList }}" wx:key="index">{{ item.name }} </view><view wx:for="{{ fruitList }}" wx:key="*this">{{ item.name }} </view>

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

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

相关文章

二叉树题解——二叉树的直径【LeetCode】

543. 二叉树的直径 一、算法逻辑&#xff08;逐步通顺讲解每一步思路&#xff09; &#x1f3af; 问题目标&#xff1a; 求二叉树中任意两个节点之间的最长路径&#xff08;以边数计算&#xff09;。 ✅ 1️⃣ 初始化变量 ans 用于记录目前遍历过程中的最大直径&#xff08;…

Android开发 Android10及10+读取外部存储问题

前提 &#xff1a; 在做文件遍历时&#xff0c;有的文件在Android10无法访问&#xff0c;在注册清单下添加android:requestLegacyExternalStorage"true"后可正常访问&#xff0c;但一直不知道具体原因。 使用XXPermissions时读到Android10分区存储后才明白这里的逻辑…

IP地理定位技术综述:理论、方法与应用创新(三)

[1]刘学婷,台文鑫,周帆,等.IP地理定位技术综述:理论、方法与应用创新[J].通信学报,2025,46(04):33-48. 2 IP地理定位应用场景 基于 IP 地理定位技术的特性和多样化应用场景,本文将其主要应用分为地理定位服务、网络安全与优化、网络空间测绘3类,如图7所示。基于IP地理定位…

16-C#生成DLL与调用

C#生成DLL与调用 1.2.3.4.5.将DLL文件复制到DEBUG下6.7.8.private void button79_Click(object sender, EventArgs e) {ClassLibrary1.Class1 testnew ClassLibrary1.Class1();UInt16 aConvert.ToUInt16(textBox67.Text);UInt16 b Convert.ToUInt16(textBox68.Text);label90.T…

JSON解析工具哪家强?

一、研究背景与目的 在现代Java应用开发中&#xff0c;JSON数据格式的解析性能直接影响系统响应速度与吞吐量。当处理高并发请求或大规模数据转换时&#xff0c;解析工具的选择尤为关键。本文通过JMH&#xff08;Java Microbenchmark Harness&#xff09;基准测试框架&#xf…

Go语言动态数据访问实战

Go语言反射实战&#xff1a;动态访问商品数据中的复杂字段 前言 在电商或仓储管理系统中&#xff0c;商品信息结构复杂且经常变化。比如商品有基本属性&#xff08;ID、名称、类型&#xff09;&#xff0c;还有动态扩展属性&#xff08;规格、促销信息、库存详情等&#xff0…

[特殊字符] Excel 按月筛选 + 工作表复制 + 样式批量处理 —— Python 自动化大汇总

本教程展示如何使用 Python 的 openpyxl 实现&#xff1a; 多工作表遍历&#xff1a;自动查找每月物料表&#xff1b; 条件筛选&#xff1a;获取 G 列数量大于 1000 的记录&#xff1b; 生成汇总表&#xff1a;从模板复制页面并写入筛选结果&#xff1b; 统一样式&#xff1…

Text2SQL主流实现方案

目录 基于 Prompt Engineering 的方案 基于模型微调的方案 T5 模型结构 MIGA 基于RAG 的方案 参考 基于 Prompt Engineering 的方案 这类方案比较简单粗暴,就是通过精心设计的提示来引导 LLM 生成 SQL,一般包含下面这些做法: 1. 零样本提示:直接向 LLM 提供数据库…

有哪些开源的SSO框架?

SSO&#xff08;Single Sign-On&#xff09;是一种身份验证机制&#xff0c;允许用户通过一次登录访问多个相互信任的系统或应用&#xff0c;无需重复输入凭证。核心目标是提升用户体验和安全性&#xff0c;减少密码疲劳和管理成本。​一、常见开源SSO框架概览​开源SSO框架主要…

LoRA 问答微调与部署全流程:基于 LLaMA-Factory + DeepSeek + FastAPI 打造专属大模型

想快速掌握大模型落地实战&#xff1f;本文将手把手教你完成一个国产大模型的微调任务&#xff0c;并通过 FastAPI 向后端暴露接口。特别适合希望快速将大模型应用于实际业务的开发者。 &#x1f4cc; 本文为《LoRA 应用实录》系列第 3 篇&#xff0c;在第一篇里讲解了LoRA在 …

分布式部署下如何做接口防抖---使用分布式锁

防抖也即防重复提交&#xff0c;那么如何确定两次接口就是重复的呢&#xff1f;首先&#xff0c;我们需要给这两次接口的调用加一个时间间隔&#xff0c;大于这个时间间隔的一定不是重复提交&#xff1b;其次&#xff0c;两次请求提交的参数比对&#xff0c;不一定要全部参数&a…

【Java工程师面试全攻略】Day10:系统性能优化全链路实践

一、性能优化的多维视角 系统性能优化是区分普通开发者与高级工程师的关键能力指标。根据Google的研究&#xff0c;性能优化带来的用户体验改善可以直接转化为商业收益——页面加载时间每减少100ms&#xff0c;亚马逊的销售额就增加1%。今天我们将从全链路视角剖析性能优化的方…

在kotlin中如何更好的理解 高阶函数

在 Kotlin 中&#xff0c;高阶函数的本质是「将函数作为商品流通的交易模式」。 核心需求&#xff1a;传统函数只能操作数据&#xff08;如数字、字符串&#xff09;&#xff0c;但实际开发中常需复用逻辑流程&#xff08;如「先校验参数&#xff0c;再执行操作」的流程适用于…

15-C#的scottplot控件库绘制曲线图

C#的scottplot控件库绘制曲线图 1.使用Nuget 安装scottplot控件库2.绘制柱状图private void button54_Click(object sender, EventArgs e){double[] values { 5, 10, 7, 13, 22, 18, 33, 16 };formsPlot1.Plot.Add.Bars(values);formsPlot1.Refresh();}3.中文标题显示问题 for…

使用jiaminghi/data-view-react, 本地调试能显示,发布就不显示|不成功(版本冲突)

你遇到的问题是&#xff1a; 使用 jiaminghi/data-view-react&#xff08;也就是 DataV 可视化组件库&#xff09;&#xff0c;本地调试没问题&#xff0c;但发布后打包上线却不显示图表/组件。 ✅ 常见原因&#xff08;很大概率命中&#xff09; 1. CSS 或字体资源路径丢失 …

网络层:ip协议 与数据链路层

目录 网络层 引子与前置知识 一、协议格式 二、网段划分(重要) 三、特殊的IP地址 四、IP地址的数量限制 五、私有IP地址和公网IP地址 六、理解运营商和全球网络 七、路由 八、协议格式补充 数据链路层 一、以太网帧格式 二、局域网的通信原理 三、认识MTU 四、…

Nginx入门进阶:从零到高手的实战指南

Nginx 入门与进阶玩法指南 一、什么是 Nginx&#xff1f; Nginx&#xff08;Engine X&#xff09;是一个高性能的 HTTP 和反向代理服务器&#xff0c;同时也可以作为 IMAP/POP3/SMTP 邮件代理服务器。它最初由俄罗斯程序员 Igor Sysoev 开发&#xff0c;用于解决高并发下 Apa…

NPM组件 alan-baileys 等窃取主机敏感信息

【高危】NPM组件 alan-baileys 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 alan-baileys 组件包时会窃取用户的主机名、用户名、工作目录、IP地址等信息并发送到攻击者可控的服务器地址。 MPS编号MPS-wkyd-5v7r处置建议强烈建议修复发现时间2025-07-02投毒仓库npm…

Python爬虫实战:研究httplib2库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的信息量呈爆炸式增长。如何从海量的网页中高效地获取有价值的数据,成为了当前信息技术领域的一个重要研究课题。网络爬虫作为一种自动获取互联网信息的程序,能够按照一定的规则,自动地抓取网页内容并提取和整理信…

【C++】简单学——模板初阶

模板&#xff08;template&#xff09; 泛型编程&#xff0c;让编译器把我们不想干的事情给干了 类似于typedef&#xff0c;解决了typedef使用不方便地原因&#xff08;虽然看似写少了&#xff0c;其实只是编译器做多了&#xff09; 例如&#xff1a; 生成两个栈&#xff0c;…