微信小程序新手入门教程三:基础语法介绍

WXML(WeiXin Markup Language)是框架设计的一套标签语言,可以与各种组件相结合,进行页面构建。

一 常用标签

wxml的语法结构与我们熟悉的html很像,但在细节处略有不同,我们可以参考html标签对比记忆。wxml中最经常使用的标签无异于是<view>标签,它就相当于html中的div标签,可以进行区域的分隔,同样是块级元素。

我们可以新建一个页面,尝试添加如下两行代码:

<view>我是第一句话</view>
<view>我是第二句话</view>

可以看到在页面上这两行话分别出现在了两行里,由此可见view是一个块级元素,会自动换行。

接下来是我们之前已经见到过的<text>标签,它相当于span标签,是一个行内元素。我们尝试把上面两行代码中的标签换成text。

可以看到这两行文字出现在了同一行。

同样,wxml里也有checkbox、radio、img等标签,基础用法与html一样,这里我们先不做过多讲解,在后面的组件部分再进行其扩展功能的详细介绍。

二 数据类型

wxml支持的数据类型也很常见,如字符串、数字、布尔、对象、表达式等,我们直接用几个例子进行说明。

    <!-- 1 字符串 --><view>{{msg}}</view><!-- 2 数字类型 --><view>{{num}}</view><!-- 3 boolean类型 --><view>是否为空:{{isEmp}}</view><!-- 4 对象类型 --><view>{{person.name}}</view><view>{{person.age}}</view><!-- 5 在标签的属性中使用 --><view data-num="{{num}}">自定义</view><!-- 6 使用Boolean类型充当属性(默认被选中) --><view><checkbox checked/></view><!-- 7 表达式 --><!-- 可以在{{}}中加入表达式(数字运算,字符串拼接,逻辑运算,三元表达式....) --><view>{{1 + 1}}</view><view>{{10 % 2}}</view><view>{{'11' + '22'}}</view><view>{{10 % 2 == 0 ? '偶数' : '奇数'}}</view>

 这里的{{}}和vue语法中的用法相同,表示插值,{{}}的值将会被替代为对应 data 对象上对应属性的值。无论何时,绑定的数据对象属性发生了改变,插值处的内容都会更新。也就是说我们需要在data数组中存放对应的属性,具体代码如下:

data: {msg:"hello mina",num:10000,isEmp:false,person:{age:72,height:123,name:"张三"},list:[{id:0,name:"zhangsan"},{id:1,name:"lisi"},{id:2,name:"wangwu"},{id:3,name:"zhaoliu"}]}

效果如下:

三 循环 (列表渲染)

我们可以在组件上使用 wx:for 控制属性绑定一个数组,从而使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。

wx:for="{{数组或对象}}"    wx:for-item="循环项的名称"    wx:for-index="循环项的索引"

wx:key="唯一值"  

<view>数组循环</view>
<view wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="id">索引:{{index}}值:{{item.name}}</view><view>对象循环</view>
<view wx:for="{{person}}" wx:for-item="value" wx:for-index="key">属性:{{key}}值:{{value}}
</view>

我们也可以使用wx:for进行嵌套,如下代码功能为写一个九九乘法表:

<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i"><view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j"><view wx:if="{{i <= j}}">{{i}} * {{j}} = {{i * j}}</view></view>
</view>

 四 判断(条件渲染)

我们可以在组件中使用 wx:if来判断是否需要渲染该代码块,也可以用 wx:elif 和 wx:else 来添加一个 else 块。

语法:wx:if ="{{true/false}}

<!-- wx:if ="{{true/false}}" --><view><view>条件渲染</view><view wx:if="{{true}}">显示</view><view wx:if="{{false}}">隐藏</view><view wx:if="{{false}}">1</view><view wx:elif="{{false}}">2</view><view wx:else>3</view></view>

在wxml中,还可以使用hidden来控制组件的显示与否。具体用法为:

1)在标签上直接加上hidden

<view hidden> 01</view>

2)使用hidden=“{{true}}”

<view hidden ="{{true}}"> 01</view>

我们可以看到,wx:if与hidden都可以实现隐藏元素的功能,那么它们有什么区别呢?

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

 

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

 由于hidden是以设置display来实现功能的,因此hidden与display样式不能同时使用

在实现业务时,我们也可以根据两者的特性,来选择优先使用哪种方式来隐藏元素。

当标签不是频繁的切换显示,优先使用wx:if,直接把标签从页面移除掉;否则优先使用hidden,通过切换样式的方式切换显示

五 数据绑定

在wxml中,数据绑定可以分成两步

1.data中定义数据

2.在WXML中使用数据

  有没有觉得很眼熟?我们在学习数据类型的时候其实就已经用到了数据绑定。

具体而言,就是要把我们需要的数据首先在页面对应的 .js 文件中,定义到 data 对象中,之后到wxml页面中进行渲染,在需要使用该变量的地方使用 Mustache 语法({{}})将变量名包起来即可。

 通过数据绑定,我们可以绑定内容、属性,还可以做一些简单的运算(字符串拼接、数字运算、三元运算符)

在wxml页面中添加如下代码:

<view><view>绑定内容:{{content}}</view>  <view>绑定属性:<img src="{{src}}" /></view><view>绑定运算:{{num+1}}+1</view>
</view>

在data中添加如下数据:

data: {num:1,content:"我是要绑定的内容!~",src:"https://ts1.cn.mm.bing.net/th/id/R-C.66d7b796377883a92aad65b283ef1f84?rik=sQ%2fKoYAcr%2bOwsw&riu=http%3a%2f%2fwww.quazero.com%2fuploads%2fallimg%2f140305%2f1-140305131415.jpg&ehk=Hxl%2fQ9pbEiuuybrGWTEPJOhvrFK9C3vyCcWicooXfNE%3d&risl=&pid=ImgRaw&r=0"},

可以看到效果如下:

 六 事件绑定

事件就是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。例如鼠标点击时可以添加事件,输入框输入文本时也可以添加事件。我们经常见到的点击提交按钮,出现弹框提示“提交成功”,就是通过事件实现的。

 我们接下来通过一个小案例来完成对事件绑定的学习。

为页面添加一个输入框,要求用户在输入框输入数字后,可以立刻在页面上显示出来用户输入的内容。

这是一个非常常见的事件绑定案例, 实现思想就是在文本框上绑定输入事件,当有文本输入时就调用事件函数,通过事件源对象获取输入内容并赋值给data中的数据,再通过数据绑定将其显示在页面上。

首先我们先搞一个输入框和负责回显数字的view标签,并为输入框绑定输入事件bindinput(这里补充一下另两个事件:点击事件bindtap和状态改变时事件bindchange)。事件函数名为handleInput。

<input type="text" bindinput="handleInput"/>
<view>{{num}}</view>

之后就是在data中添加num数据,以及完善我们handleInput函数的内部逻辑了。

 data: {num:0}

首先在data中添加变量num,赋初值为0。

handleInput(e){// console.log(e.detail.value);this.setData({num:e.detail.value})}

然后在与data并列的位置添加函数handleInput(), 将事件源对象获取的输入内容赋值给num。这里需要额外注意一下赋值的方式,是通过setData进行赋值的,而不是我们常用的this.data.num = xx或this.num = xx 。

可以看到我们的页面刚开始是左边这样的,当我们在上方的文本框中输入数字后,下面的数字就会跟着改变了:

 那么,问题升级,你能否在页面上添加两个按钮,实现点击按钮就能数字的加一减一功能呢?

<button bindtap="handleTap" data-operation="{{1}}">+</button>
<button bindtap="handleTap" data-operation="{{-1}}">-</button>

首先我们先加入两个按钮,增加我们之前提到过的点击事件bindtap,绑定事件函数。这里需要额外注意,我们不能通过函数名+()的形式直接传参!但是可以用自定义属性的方式进行参数传递,这里我们定义属性data-operation。在函数中使用const关键字定义常量operation接受传递过来的值。

handleTap(e){// 获取自定义属性operationconst operation = e.currentTarget.dataset.operation;this.setData({num:this.data.num + operation})}

这里的核心思路就是将num的值改为当前值加上传递过来的参数值。


关于wxml的基础语法介绍就介绍这么多啦,老规矩,更多的内容可以到官方文档WXML 语法参考 / 介绍 (qq.com) 中查看。下一篇我们一起学习样式的设计和更多的标签~

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

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

相关文章

备战蓝桥杯---搜索(DFS基础1)

何为深搜&#xff1f; 即不撞南墙不罢休。 话不多说&#xff0c;直接看题&#xff1a; 我们可以把这看成深搜的模板题&#xff0c;下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[15];//存值并输出 int vis[15]; int n18; void dfs(int …

浅谈Zookeeper及windows下详细安装步骤

1. Zookeeper介绍 1.1 分布式系统面临的问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 面临的问题&#xff1a;系统每个节点之间信息同步及共享 以一个小团队为例,面临的问题 通过网络进行信息…

无人机森林防火解决方案,无人机低空监测系统解决森林防火技术

我国森林资源较为贫乏&#xff0c;森林覆盖率约为13%左右&#xff0c;人均森林占有面积仅为世界平均值的1/6&#xff0c;但森林大火每年都有发生&#xff0c;如何解决森林防火的问题&#xff0c;又成为林业工作的重中之重。 无人机中低空监测系统具有机动快速、使用成本低、维护…

算法学习——华为机考题库2(HJ11 - HJ20)

算法学习——华为机考题库2&#xff08;HJ11 - HJ20&#xff09; HJ11 数字颠倒 描述 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出 程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0&#xff0c;如输入为100&#xff0c;则输出为0…

Github处理clone慢的解决方案

Github设置代理clone依然慢的解决方案 1、前提&#xff1a;科学上网 注意&#xff1a; 必须要有科学上网&#xff01;必须要有科学上网&#xff01;必须要有科学上网&#xff01;重要的事情说三遍&#xff1b; 2、http/https方案&#xff08;git clone时使用http&#xff09…

例34:窗体增加20宽度

建立一个EXE工程&#xff0c;在窗体上放一个标签。输入代码&#xff1a; Sub Form1_WM_LButtonUp(hWndForm As hWnd, MouseFlags As Long, xPos As Long, yPos As Long)Me.WidthMe.Width20Me代指本窗体End SubSub Form1_Label1_WM_LButtonDown(hWndForm As hWnd, MouseFlags A…

数据结构篇-05:哈希表解决字母异位词分组

本文对应力扣高频100 ——49、字母异位词分组 哈希表最大的特点就是它可以把搜索元素的时间复杂度降到O(1)。这一题就是要我们找到 “字母异位词” 并把它们放在一起。 “字母异位词”就是同一个单词中字母的不同组合形式。判断“字母异位词”有两个视角&#xff1a;1、所含字…

大数据信用报告查询费用一般要多少钱?

一些不少朋友在申贷的时候被拒贷之后&#xff0c;得到的原因就是因为大数据不良被拒&#xff0c;这时候很多人都反过来查询自己的大数据信用报告&#xff0c;而查询的价格也是不少朋友都比较关注的&#xff0c;那大数据信用报告查询费用一般要多少钱呢?下面本文就为你介绍一下…

面试150 二进制求和 位运算

Problem: 67. 二进制求和 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public String addBinary(String a, String b){StringBuilder ans new Stri…

C#读取和保存INI文件配置

在C#应用程序中&#xff0c;读取和保存配置文件是常见的任务&#xff0c;而INI文件是一种轻量级的配置文件格式。在以下代码中&#xff0c;我们将探讨如何使用C#创建一个窗体应用程序&#xff0c;并通过读取和保存INI文件配置来实现一些基本的功能。 创建IniHelper类 首先&…

flask基于Python的期货交易模拟系统的django-afl61-vue

期货交易模拟系统是一个便于用户在线查看期货投资、取消投资、风险控制、账户资金、持仓资金等&#xff0c;管理员进行管理的平台。因此本文主要论述了系统开发的过程和实现的功能&#xff0c;结合Web技术来实现的期货交易模拟系统。本系统以软件工程理论为开发基础&#xff0c…

计算机网络实验五

目录 实验五 路由器基本配置 1、实验目的 2、实验设备 3、网络拓扑及IP地址分配 4、实验过程 &#xff08;1&#xff09;路由器设备名称的配置 &#xff08;2&#xff09;路由器每日提示信息配置 &#xff08;3&#xff09;路由器端口的IP地址配置 &#xff08;4&…