微信小程序模板与配置(一)wxml模板语法渲染页面结构

ops/2024/9/20 4:01:59/ 标签: 微信小程序, 小程序

一、数据绑定

基本原则:在data中定义数据,在wxml中使用数据

1、在data中定义页面的数据

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

/*** 页面的初始数据*/data: {info: 'hello world'},

输出结果:

2、Mustache语法/插值表达式的格式

把data中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可,语法格式为:<view>{{要绑定的数据名称}}</view>

<view>{{info}}</view>

3、Mustache语法的应用场景

动态绑定内容(案例如2)、动态绑定属性、运算(三元运算、算术运算等)

(1)动态绑定属性

/**js文件*/
/*** 页面的初始数据*/data: {imgSrc: '/pages/image/1.jpg',//本地图片//  imgSrc: 'http://www.itheima.com/images/logo.png' //外部链接图片
},
<!--wxml文件-->
<image src="{{imgSrc}}"></image> 

输出结果:

(2)三元运算

/**js文件*//*** 页面的初始数据*/data: {// 10以内的随机数字RandomNum1: Math.random() * 10  },
<!--wxml文件-->
<view>{{RandomNum1 >=5?'数字大于或等于5':'数字小于5'}}</view>

输出结果:

调试器查看输出结果:

找到调试器-AppData,点击“编译”,

(3)算术运算

总结:

以上演示的所有代码

/**js文件中的代码*/
Page({/*** 页面的初始数据*/data: {
//动态绑定内容
info: 'hello world',
//动态绑定属性imgSrc: '/pages/image/1.jpg',// 10以内的随机数字RandomNum1: Math.random() * 10,//算术运算:生成一个带两位小数的随机数RandomNum: Math.random().toFixed(2)},
})
<!--wxml文件-->
<!—动态绑定内容 --><view>{{info}}</view> 
<!—动态绑定属性--><image src="{{imgSrc}}"></image>  
<!—三元运算--><view>{{RandomNum1 >= 5 ? '数字大于或等于5' : '数字小于5'}}</view> 
<!—算术运算 -->
<view>生成100以内的随机数:{{RandomNum * 100}}</view> 

注:编写边看实现效果,全部代码写完可能只能显示最后两条,清除缓存重新编译即可。

二、事件绑定

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

有关渲染层和逻辑层的详细文档参考:https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html

1、小程序中常用的事件

2、事件对象的属性列表:

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

3、target和currentTarget区别

target是触发该事件的源头组件,而currentTarget则是当前事件所绑定的组件。

简单来说,点击“按钮”,如果使用e.target,点击“按钮”才会起作用;如果使用e.currentTarget,点击“view”也会起作用。

4、bindtap的语法格式:

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

通过bindtap,可以为组件绑定tap触摸事件,语法如下:

<!--wxml文件-->
<!--事件绑定-->
<button type="primary" bind:tap="btnTapHandler">按钮</button>
//在页面的.js文件中定义对应的事件处理函数,时间参数通过形参event(一般简写成e)来接收:
//js文件中:
//定义按钮的事件处理函数btnTapHandler(e){console.log(e)},

测试效果:

三、事件传参与数据同步

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

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

wxml文件:

<button type="primary" bind:tap="CountChange">+1</button>

/**js文件:*//*** 页面的初始数据*/data: {
count: 0
},//+1 点击事件的处理函数CountChange(){this.setData({count: this.data.count + 1})},

1、事件传参:

小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。

小程序会把bindtap的属性值,统一当作事件名称来处理。

e.g 该代码不会工作

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

这相当于要调用一个名为btnHandler(123)的事件处理函数。

正确的做法是 :

可以为组件提供data-*自定义属性传参,其中*代表参数名称,示例代码如下:

<!—wxml页面--><!--事件传参--><!--显示数值--><button type="primary"  bind:tap="btnTap2" data-info="{{2}}">+2</button><!--显示字符串--><button type="primary"  bind:tap="btnTap3" data-info="2">+2</button>

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

//事件绑定的处理函数   this.data.count表示原来的值  e.target.dataset.info表示点击按钮的值btnTap2(e){this.setData({count: this.data.count + e.target.dataset.info})},

2、bindinput的语法格式

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

通过bindinput,可以为文本框绑定输入事件

<!—wxml页面—><!--bindinput--><input bindinput="inputHandler"></input>
//在页面.js文件中定义事件处理函数://bindinput值的获取inputHandler(e){console.log(e.detail.value)},

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

步骤:

(1)定义数据

/** js*/data: {msg: ‘你好’},

(2)渲染结构

<!—wxml--><input value="{{msg}}" bindinput="inputHandler"></input>

(3)美化样式

/*wxss页面*/input {border:1px solid purple;margin: 5px;padding: 5px;border-radius: 3px;}

(4)绑定input事件处理函数

        (在页面上输入值,同步到原来的值)

/** js页面*/inputHandler(e){this.setData({msg: e.detail.value})},

在文本框中输入值,会返回

四、条件渲染:

1、wx:if

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

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

/**js*/data: {type: 1},
<!—wxml- -><!--条件渲染--><view wx:if="{{type === 1}}">男</view><view wx:elif="{{type === 2}}">女</view><view wx:else>保密</view>

测试结果:

2、结合<block>使用wx:if

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

<!—wxml页面--><!--wx:if后就只有true和false两种值,true就显示,false就隐藏--><block wx:if="{{false}}"><view>男</view><view>女</view><view>保密</view></block>

注:<block>并不适用一个组件,它只是一个包裹性质的容器,不回在页面中做任何渲染。如果使用<view>,就会渲染出一个组件,就像是两个div外面还有一个div。

3、hidden

小程序中,直接使用hidden-“{{condition}}”也能控制元素的显示与隐藏:

js文件:

data: {flag: true},

wxml文件:

<!--hidden--><view hidden="{{flag}}">如果条件为true就隐藏,为false就显示:</view>

4、wx:if和hidden的区别

(1)运行方式不同

wx:if 以动态创建和移除元素的方式,控制元素的展示与隐藏;

hidden以切换样式的方式(display:none/block;),控制元素的显示与隐藏

<!—wxml页面 --><!--hidden与wx:if的对比--><view hidden="{{!flag}}">如果条件为true就隐藏,为false就显示:</view><view wx:if="{{flag}}">这是使用wx:if展示的元素</view>如果flag为true,

若flag为false,

简单来说,当条件不符合时,wx:if判断的值是不存在的。而hidden隐藏的是真实存在的。

使用建议:

频繁切换时,建议使用hidden

控制条件复杂时,使用wx:if搭配wx:elif、wx:else进行展示与隐藏的切换

五、列表渲染

1、wx:for

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

js文件中定义数组:

data: {arry: ['OPPO','MI','vivo']},

wxml文件中渲染列表:

<!--列表渲染--><view wx:for="{{arry}}">索引是:{{index}},item项是{{item}}</view>

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

手动指定索引和当前项的变量名(不常用)

使用wx:for-index可以指定当前循环项的索引变量名

使用wx:for-item可以指定当前项的变量名

示例代码如下:

<!--指定索引项和变量名--><view wx:for="{{arry}}" wx:for-index="dex" wx:for-item="items">索引是:{{dex}},item项是{{items}}</view>

输出结果同上。

2、wx:key的使用

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

/**js文件中定义对象*/data: {/**名字一定要用’’包裹,否则无法显示*/List: [{id: 1,name:'小芳' },{id: 2,name: '小明'},{id: 3,name: '小王'}]},
<!—wxml页面中--><!—id不能使用{{}}包裹,如果数组中没有定义id,也可以写成index - ->
<view wx:for="{{List}}" wx:key="id">{{item.name}}</view>

3、wxss样式美化页面结构

(1)wxss与css的关系

什么是wxss?

WXSS(WeiXin Style Sheets)是一套样式语言,用于美化WXML的组件样式。

WXSS和CSS的关系

WXSS具有CSS大部分特性,同时,WXSS还对CSS进行了扩充以及修改,以适应小程序>微信小程序的开发。

与CSS相比,WXSS扩展的特性有:

rpx尺寸单位

@import样式导入

(2)rpx单位

什么是rpx尺寸单位?

rpx(responsive pixel)是小程序>微信小程序独有的,用来解决屏适配的尺寸单位。

rpx的实现原理

鉴于不同设备屏幕的大小不同,为了实现屏幕的自动适配,rpx把所有设备的屏幕,在宽度上等分为750份(即:当前屏幕的总宽度为750rpx)

在较小的设备上,1rpx代表的宽度较小;

在较大的设备上,1rpx代表的宽度较大。

小程序在不同设备上运行的时候,会自动把rpx的样式单位换算成对应的像素单位来渲染,从而实现屏幕适配。

4、rpx与px之间的单位换算(了解)

官方建议:开发小程序>微信小程序时,设计室可以用iPhone6作为视觉稿的标准。


http://www.ppmy.cn/ops/95702.html

相关文章

15:【stm32】时钟树

时钟树 1、时钟树1.1&#xff1a;简要的介绍1.2&#xff1a;基本结构1.2.1&#xff1a;stm32的内部结构1.2.2&#xff1a;树的关键节点1.2.3&#xff1a;系统时钟的来源 2、RCC标准库编程2.1&#xff1a;片上外设的复位与释放2.2&#xff1a;时钟系统配置2.3&#xff1a;时钟树…

ElasticSearch的Mapping和DSL语言

ElasticSearch的Mapping和DSL语言 文章目录 ElasticSearch的Mapping和DSL语言mapping(映射)动态映射类型自动识别 静态映射关于后期更改mapping字段类型&#xff1f;重建索引步骤 常用mapping参数配置index_template 和mapping_template Query DSL数据初始化无条件查询&#xf…

Jedis的使用以及Java和redis的连接

一、Jedis 我们要使用 Java 来操作 Redis&#xff0c;什么是Jedis 是 Redis 官方推荐的 java连接开发工具&#xff01; 使用Java 操作 Redis 中间件&#xff01; 1、导入对应的依赖 <!--导入jedis的包--> <dependencies><!-- https://mvnrepository.com/artif…

haproxy实验

基本介绍 http://t.csdnimg.cn/Z64QVhttp://t.csdnimg.cn/Z64QV 实验环境 功能IP客户端172.25.254.233haproxy eth0:172.25.254.100 eth1:192.168.0.10 rs1eth0:192.168.0.101rs2eth0:192.168.0.102 安装haproxy yum install haproxy -y 多进程和多线程 vim /etc/hap…

关于xilinx的FFTIP的使用和仿真

工具&#xff1a;vivado2018.3&#xff0c;modelsim10.6d 场景&#xff1a;在进行数据进行频谱分析的时候&#xff0c;使用FPGA来完成FFT的计算可以加快数据的计算速度。 下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生&#xff0c;通过IP产生的波形数据…

一次不严谨的C++、C、Pascal、Rust等对比

起因 现在ACM用得多的基本上就两种语言&#xff0c;C和Python3&#xff0c;还有部分Java&#xff0c;但是当年ACM必学的Pascal、新近流行的rust也有人用&#xff0c;只不过用户很少。 就以一道codeforce上的算法小题为样本&#xff0c;来对比一样用户数量、执行效率、易写程度…

浙大数据结构慕课课后题(06-图3 六度空间)

题目要求&#xff1a; 输入格式: 输入第1行给出两个正整数&#xff0c;分别表示社交网络图的结点数N&#xff08;1<N≤103&#xff0c;表示人数&#xff09;、边数M&#xff08;≤33N&#xff0c;表示社交关系数&#xff09;。随后的M行对应M条边&#xff0c;每行给出一对正…

【LeetCode】无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”&…

截屏工具:PixPin

省流&#xff1a;使用 PixPin 截图&#xff0c;设置格式为 JPG。 ‍ 一、介绍 PixPin ‍ 一个好用的截图工具。 官网&#xff1a;https://pixpinapp.com/ ​​ ‍ 支持功能&#xff1a; 截图。支持界面元素识别&#xff0c;支持 CtrlC​ 复制到剪贴板&#xff0c;Ctrl…

docker做Llm开发时可能会遇到的问题

如果没有开启GPU&#xff0c;会报错 docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]. 原因可能是 &#xff1a;没有安装 GPU Docker 运行时 则按照如下参照安装&#xff0c; 基于 Docker 的深度学习环境&…

【数据结构与算法】选择排序

选择排序目录 一.问题引入二.图解三.具体实现四.每次找最小值实现五.完整代码 一.问题引入 假设我们想要将此排序按从小到大,那么我们可以怎么排呢? 我们可以每次从里面选择最大的,放在最后面,继续选剩下的最大的放在刚刚放在最后面的前面一个. 每次选择最小的放在前面也是同样…

57qi5rW35LqRZUhS pc.mob SQL注入漏洞复现

0x01 产品简介 57qi5rW35LqRZUhS是大中型企业广泛采用人力资源管理系统。某云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 57qi5rW35LqRZUhS pc.mob 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例…

政务大数据解决方案(六)

政务大数据解决方案通过构建全面的数据集成平台&#xff0c;将来自不同政府部门和公共服务领域的多维度数据汇聚起来&#xff0c;运用先进的数据分析和人工智能技术进行深度挖掘与预测&#xff0c;从而为政府提供实时、精准的信息支持&#xff0c;优化决策流程&#xff0c;提高…

JDBC连接Mysql

一、JDBC实战技术 1.1JDBC概念 JDBC&#xff08;Java DataBase Connectivity&#xff1a;java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系型数据库提供统一访问&#xff0c;它是由一组用Java语言编写的类和接口组成的。JDBC的作用&…

C语言—函数递归

一、递归概念 递归其实是⼀种解决问题的⽅法&#xff0c;在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。下面举一个例子&#xff1a; 上述就是⼀个简单的递归程序&#xff0c;只不过上⾯的递归只是为了演⽰递归的基本形式&#xff0c;不是为了解决问题&#xff0c;代码最终…

gitlab设置中文

Centos7&#xff08;最小化&#xff09;系统安装部署私人gitlab远程仓库-CSDN博客 目录 登录gitlab 点击edit profile 点击preferences&#xff08;偏好&#xff0c;爱好&#xff09;&#xff0c; 下滑找到Localization&#xff08;本地&#xff09; 点击language&#xf…

redis五种数据结构以及一些基本操作

Redis 支持五种基本的数据结构&#xff0c;这些数据结构使得 Redis 能够灵活应用于各种场景。 字符串&#xff08;Strings&#xff09; 是 Redis 中最基本的数据类型&#xff0c;可以被理解为简单的 key-value 对&#xff0c;其中 value 是字符串。字符串类型的数据可以是任何…

为什么要有二级指针

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 之前一直疑问为什么要有二级指针&#xff0c;一直没有写这个帖子&#xff0c;今天整理了一下&#xff0c;收获颇丰 二、 2.1 // 增加对二级指针…

数据可视化之旅,从数据洞察到图表呈现,可视化的产品设计

图表作为数据可视化的重要工具&#xff0c;是对原始数据进行深度加工与解读的有效手段&#xff0c;它助力我们洞悉数据背后的真相&#xff0c;使我们能更好地适应这个由数据驱动的世界。无论是工作汇报、项目实施、产品设计、后台界面还是数据大屏展示&#xff0c;图表都扮演着…

【学习笔记】Day 16

一、进度概述 1、ddnet_main 相关代码学习 二、详情 今天的主要内容是逐句分析 ddnet_main 相关代码&#xff0c;暂未完成&#xff0c;具体整理见明天的笔记。 在阅读代码的过程中&#xff0c;发现自己的 Python 相关代码能力还有些弱&#xff0c;很多语法&#xff0c;用法上的…