Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >微信小程序WXML页面常用语法(讲解+示例)

微信小程序WXML页面常用语法(讲解+示例)

作者头像
BWH_Steven
发布于 2020-08-18 07:08:14
发布于 2020-08-18 07:08:14
5.6K056
代码可运行
举报
文章被收录于专栏:理想二旬不止理想二旬不止
运行总次数:56
代码可运行

(一) WXML 是什么

官方说明:WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构

在前面我们就已经提过,WXML,就可以理解为我们传统页面中的HTML,它是微信为我们提供的一套标签语言,可以说它就是我们小程序的脸面(虽然没经过CSS装饰前不一定光鲜亮丽),开发中 WXML 页面就作为我们一些逻辑行为的入口,以及效果展示的承载者。

再大白话一点:你所看到的小程序页面长什么样(不涉及背后做了什么行为,只说表面),就是 WXML(主要) + WXSS (美化) 实现的

这一篇,我们主要涉及到的是 WXML 中例如数据绑定、或者运算等等,但是学习之前,很显然,我们需要认识几个常见的标签,后面我们会总结一些常用的标签,下面会用到的有:

<text></text><view></view> <image></image> 还有一些标签,大家去看官网文档就可以了,写的非常清楚,我们这里重点还是说一下关于其中的一些标签语法问题

官网——WXML语法文档

https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/

官网——组件文档

https://developers.weixin.qq.com/miniprogram/dev/component/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--pages/demo01/demo01.wxml-->

<!-- text 不会换行,可以理解为传统页面中的 span 行内元素-->
<text>这是text标签1</text>
<text>这是text标签2</text>

<!-- view 会换行,可以理解为传统页面中的 div 块级元素 -->
<view>这是div标签1</view>
<view>这是div标签2</view>

<view>
  <!-- 我博客的图,显示如果出现什么问题,自己替换一下哈 -->
  <image  mode='widthFix' style='width:60%' src='https://www.ideal-20.cn/medias/avatar.jpg'></image>
</view>

看一下效果

(二) 数据绑定

虽然还不涉及到什么页面的美化,以及复杂的标签,不过一个极为简单的静态页面现在已经可以构造出来了,归根结底,我们最后都是要进行前后台数据的交互的,而微信小程序就为我们提供了很多很好用的用法,能很快的进行数据的绑定操作

有一个前提条件,我们先模拟一些数据,我们只需要在页面的 js 文件中的 data对象中定义小程序初始化的数据,例如下面代码,我们随便拿一些常见的数据类型来模拟一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  /**
   * 页面的初始数据
   */
  data: {
    msg: "你好,微信小程序",
    status: 100,
    isLogin: true,
    person:{
      name: "张三",
      age: 22,
      profession: "student"
    },
    isChecked: true
  },
})

(1) 常见类型普通写法

如何在 WXML 标签组件中进行数据的绑定其实是非常简单的,微信小程序中通过 {{}} 来解析刚才在 JS 中模拟的变量

要注意:直接通过 {{}} 解析的变量都是 页面 js 文件中 Page --> data 下的

A:字符串

字符串内容直接用两个大括号括住接收就可以了,在上面我们有这样的定义:

msg: "你好,微信小程序", 所以直接括住 msg 就可以获取到后面的值了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{msg}}</view>

B:数值

数值也是一样直接可以获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{status}}</view>

C:布尔类型

布尔类型第一个代码是直接打印出其布尔类型 true 或者 false

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{isLogin}}</view>

而下面配合 checkbox 就可以实现是否选中的效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>
    <checkbox checked="{{isChecked}}"></checkbox>
</view>

D:对象

对象这块如果你直接打印 person 就会输出一个 Object 类型,所以如果想要拿到对象的属性值,一定要指定到具体的属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{person.name}}</view>
<view>{{person.age}}</view>
<view>{{person.profession}}</view>

看一下上述所有的绑定效果

(2) 组件属性中

例如我们 view 组件的 id 值前缀是固定的 user- 后面就是用户的序号,这时候就可以通过变量来进行巧妙的解析到属性中了

注:不要轻易的乱加空格,否则可能会读取失败例如:<view id=" user-{{uid}}"></view>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view id="user-{{uid}}"></view>

看一下 Wxml 的源码 id 这个属性中已经进行了拼接,这种方式同样还会常用在 class 或者 style 中,配合三元运行能不错的实现一些需求,下面我们会提到

(三) 运算

首先我们依旧定义一些数据,三个整数,和两个字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {
    a: 11,
    b: 22,
    c: 33,
    msg: "姓名",
    name: "张三"
  },
})

(1) 算数运算

直接在 {{}} 中进行 加减乘除等的运算,直接就可以得到结算的结果,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{a + b + c}}</view>
<view>{{a + b}} + {{c}}</view>

(2) 字符串运算

如果是字符串类型的数据,利用 + 进行运算,结果是一个拼接的效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{'a' + 'b' + 'c'}}</view>
<view>{{'11' + '22' + '33'}}</view>
<view>{{msg + ':' +name}}</view>

(3) 逻辑判断

这个就是常见的 if 判断,例如使用 wx:if 这个属性,那么就只有在后面的表达式为 true 的情况下才会显示文本 a 大于 0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view wx:if="{{a > 0}}">a 大于 0</view>

(4) 三元运算

三元运算的应用场景还是很多的(等式 ? : true情况,false的情况)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>{{11 + 22 === 33 ? true : false}}</view>
<view>{{11 + 22 === 33 ? '正确' : '错误'}}</view>
<view>{{a + b === c ? '等式成立' : '等式不成立'}}</view>

三元补充:

通过在属性中解析变量的方式,可以达到根据变量的值,来指定不同的 class名,以显示不同的样式

例如我们的 css 样式是这样的,iconfont 是我们共用的,所以直接写在属性中就可以了,而究竟是用 icon-back 还是 icon-remove 就可以通过一个变量来操纵,例如我们下面的 isClick 就是在 js 里 data 中定义的一个 布尔类型的变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.iconfont {......}
.icon-back:before {......}
.icon-remove:before {......}

当 isClick 为 true 就执行 class 就是这样的 class="iconfont icon-remove" 为 false 就是用另一个,我们就可以通过 控制变量值来进行不同的显示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<icon class="iconfont {{isClick ? 'icon-remove':'icon-back'}}"

看一下上述所有运算的执行结果(不含补充的结果)

(四) 列表循环(列表渲染)

(1) 模拟数据

依旧我们给一些模拟数据,一个是 person 这样的对象内部有一些属性,还有一个就是 studentList 学生集合,其中有三个学生的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {
    person:{
      pid: 1,
      name: "张三",
      age: 22,
      profession: "student"
    },
    studentList:[{
        sid:1,
        name:"汤姆",
        gender:"男"
      },{
        sid:2,
        name:"杰克",
        gender:"男"
      },{
        sid:3,
        name:"玛丽",
        gender:"女"
      }
    ]
  },
})

如果我们接受到了后台的一些集合或者数组等内容,循环遍历是一个非常常用的操作

(2) 正式使用

组件(标签)上使用 wx:for 就可以绑定一个数组或集合内容,就可用数组中各项的数据重复渲染该组件

先举个例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>
    <view 
    wx:for="{{studentList}}" wx:for-item="item" wx:for-index="index" wx:key="sid">
        {{index}} --- {{item.name}} 
    </view>
</view>

我们分别来解释一下:

  • wx:for:数组或者对象
  • wx:for-item:循环项(数组或集合)的变量名称,同时一般默认为 item
  • wx:for-index:循环项(数组或集合)的索引(下标),同时一般默认为 index
  • wx:key:绑定一个唯一的值,可以提高列表渲染的性能,可以简单理解为主键的概念,例如这里我传入了 studentList 中不可能重复的值 sid
  • 如果你的数组只是一个普通的数组,例如 [11,22,65,23,3,6] 没有所谓唯一的值,就可以使用 wx:key="this"` 即表示你的数组是一个普通的数组,`this 表示的是 item 本身

如果传这个 key 值,会有一个警告弹出

(3) 嵌套用法的补充说明

  • 如果你的循环只有一层,那么 wx:for-item="item" wx:for-index="index" 这两个内容实际上是可以省略的,小程序会自动把这两个内容设置为 item 和 index
  • 如果你的循环是一个嵌套的效果,那么切记一定 item 和 index 的值一定不要重复…

嵌套的正确写法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i" wx:key="*this">
  <view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j" wx:key="*this">
    <view wx:if="{{i <= j}}" wx:key="*this">
      {{i}} * {{j}} = {{i * j}}
    </view>
  </view>
</view>

再举一个例子(遍历对象的所有属性):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>
    <view wx:for="{{person}}" wx:for-item="value" wx:for-index="key" wx:key="pid">
    {{key}} --- {{value}} 
    </view>
</view>

看一下执行效果

(4) 循环(渲染)block标签

如果我们使用两种不同的组件(标签)看看最终渲染出来的结果有什么区别呢?

方法一(view 标签)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view wx:for="{{person}}" wx:for-item="value" wx:for-index="key" wx:key="pid">
    {{key}} --- {{value}} 
</view>
  • 结果一
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view> pid --- 1 </view>
<view> name --- 张三 </view>
<view> age --- 22 </view>
<view> profession --- student </view>

方法二(block 标签)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<block wx:for="{{person}}" wx:for-item="value" wx:for-index="key" wx:key="pid">
    {{key}} --- {{value}} 
</block>
  • 结果二
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pid --- 1 name --- 张三 age --- 22 profession --- studen

通过控制台中 Wxml 界面,可以看到,只有在 view 组件下遍历内容时才真正的生成了 dom 结构,而直接使用 block 则只是将内容重复写了几次,不会变成真正的dom元素

(五) 逻辑判断(条件渲染)

(1) 用法

这块理解没什么难点,无非就是关于逻辑的几种判断,看一个例子就清楚了

说明:isLogin 是在 js 中模拟的一个数据,分别赋予 true false 或者其他的 例如 null,会根据逻辑值显示不同的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view wx:if="{{isLogin == true}}">已经登录,逻辑为 true</view>
<view wx:elif="{{isLogin == false}}">未登录,逻辑为 false</view>
<view wx:else>不确定逻辑</view>

(2) 补充 hidden

补充用法(hidden):

通过上面的 if else 等可以控制组件例如 view 的显示,而有一个属性 hidden 同样可以实现根据逻辑值控制组件的显示

例如给 hidden 传入一个 false 就会显示出来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view hidden="{{false}}">不隐藏</view>

(3) wx:if 和 hidden 选择哪个

那么既然一定程度上都可以达到这种效果,我们选择那个呢?

先来看一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>---- 分界线 -----</view>
<view wx:if="{{false}}">if 隐藏</view>
<view hidden="{{true}}">隐藏</view>

看一下渲染出来的结构,关于 wx:if 的那块直接就没有渲染出来了,只有 hidden 的那个,由此可以得出:

  • wx:if 是直接把标签从页面结构中移除掉了
  • hidden 是通过添加样式的方式的隐藏,标签结构还在

所以,当标签不总是切换显示的时候,可以考虑先用 wx:if ,标签切换频繁的时候用 hidden

(六) 模板

(1) 创建模板

模板的字面意思就是,一个可以应用在多处,通用的一个版块,如何去用呢?

使用 name 属性,作为模板的名字。然后在 <template/> 内定义代码片段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template name="test1">
  <view>
    <text> 这是一个 template 模块 </text>
    <text> {{id}}: {{name}} </text>
  </view>
</template>

(2) 引入模板

我们需要在想引用模板的页面中引入模板,WXML 提供两种文件引用方式 importinclude

如果没有效果,可以看一下是不是路径写错了,要根据自己定义的来写哦

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<import src="../../template/test1/test1" />

<include src="../../template/test1/test1" />

这两者的区别就是 import 有作用域的问题,官网这里写的挺清楚,我直接贴一下:

import 有作用域的概念,即只会 import 目标文件中定义的 template,而不会 import 目标文件 import 的 template。

如:C import B,B import A,在C中可以使用B定义的template,在B中可以使用A定义的template,但是C不能使用A定义的template

(3) 调用模板

使用 is 属性,声明需要的使用的模板,也就是与上面的 name 一致就可以了,然后将模板所需要的 data 传入,如(直接传入):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template is="test1" data="{{id:'0', name:'张三'}}"</template>

赋值方式还有一种常用的

它的意思就是将调用这个模板页面中的 student 对象变量赋值给这个模板,三个点就是一个扩展运算符,作用就是将这个student 对象展开

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template is="test1" data="{{...student}}"></template>

例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {
    student: {
      id: 0,
      name: '张三',
    }
  }
})
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 理想二旬不止 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】《微信小程序与云开发从入门到实践》008-WXML与WXSS
在微信小程序的开发中,WXML(WeiXin Markup Language)和WXSS(WeiXin Style Sheets)是两个至关重要的技术,它们分别负责小程序的结构与样式设计。WXML作为微信小程序的标记语言,类似于HTML,帮助开发者定义页面的布局和结构;而WXSS则是其样式表语言,提供了丰富的样式设置功能,使得小程序的界面更加美观和用户友好。
愚公搬代码
2025/01/12
1560
手把手带你入门微信小程序开发(二)
官方文档—(WXML介绍) WXML(WeiXin Markup Language),是一套标签语言,和组件结合一起使用,用来构建页面的结构
Gorit
2021/12/09
5640
手把手带你入门微信小程序开发(二)
微信小程序之列表渲染wx:for
WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
软件小生活
2021/10/08
1.7K0
微信小程序之列表渲染wx:for
小程序笔记篇
豆瓣top250的数据https://api.douban.com/v2/movie/top250
达达前端
2019/07/03
6370
小程序笔记篇
微信小程序零基础入门模板语法
demo1中demo.js中的data放的是初始化数据
用户5899361
2020/12/07
1.3K0
微信小程序零基础入门模板语法
小程序基础知识点讲解-WXML + WXSS + JS,生命周期
查看官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/
达达前端
2019/07/03
1.7K0
小程序基础知识点讲解-WXML + WXSS + JS,生命周期
微信小程序复习巩固 —— (wxml,wxss、js、wx:if、wx:for)
之前学了 vue2.5,并且做了一个模仿 去哪网界面,越是学的后面,越是发现 vue 的语法和微信小程序的语法是非常相似,这次把微信小程序基础重新捡起来,毕竟从去年暑假学完小程序到现在过去了挺长时间的,这次基础语法迅速过一遍,就开始做项目了,冲冲冲
Gorit
2021/12/09
1.1K0
微信小程序复习巩固 —— (wxml,wxss、js、wx:if、wx:for)
小程序开发入门教程
微信小程序页面渲染时,框架会将WXML文件同对应的Page的data进行绑定,在页面中我们可以直接使用data的属性,其使用的语法是Mustache语法,也就是使用双大括号将变量或简单的运算规则包裹起来,实现的主要渲染方式有以下几种:
PHP开发工程师
2022/03/29
7220
小程序开发入门教程
小程序渲染
在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。通过遍历数据,将数据展示,类似vue中的 v-for。 wx:for-item 可以指定数组当前元素的变量名,wx:key 来指定列表中项目的唯一的标识符。,wx:for-index 可以指定数组当前下标的变量名,
用户2305175
2018/07/15
9340
微信小程序:WXML模板语法
把data中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可。
岳泽以
2023/03/17
2.1K0
微信小程序:WXML模板语法
小程序学习笔记 数据绑定、条件渲染、模板引用(8.11)
wx:for:在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。
德顺
2019/11/13
6810
小程序 | 8-wxml
包括 wx:if、wx:elif、wx:else . 当条件结果为 true 时显示组件,false 不显示组件。
CnPeng
2021/05/17
7350
小程序 | 8-wxml
「小程序JAVA实战」小程序视图之细说列表渲染(14)
列表的渲染,不管是任何语言都有列表这个概念。源码:https://github.com/limingios/wxProgram.git 中的No.8 小程序的列表的渲染 for 循环 view wx:
IT架构圈
2018/12/21
3940
微信小程序入门(三)
四个组成部分,其它三个前面介绍过了,主要WXS: WXS:对wxml增强的一种脚本语言,可以对请求的数据进行filter或者做计算处理,帮助wxml快速构建出页面结构。
zhang_derek
2018/08/30
5230
微信小程序入门(三)
【微信小程序】列表渲染wx:for
哈喽大家好,本期是微信小程序专栏第十二期,本期我们将学习列表渲染wx:for。 注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2022/12/01
1.1K0
【微信小程序】列表渲染wx:for
《微信小程序七日谈》- 第一天:人生若只如初见
《微信小程序七日谈》系列文章: 本系列的文章并非初学教程,而是笔者在具体开发过程中遇到的问题以及部分解决方案。 微信小程序自公布以来就被捧上了天,新闻一波接一波。一部分声音来自前端界,把小程序当成前端历史地位提升的一次革新;一部分声音来自app开发界,把小程序当成失业的助推器(摊手)。本文的目的不是讨论小程序的是或非,只是记录一下笔者在开发小程序过程中一些收获和感想。 有消息称第一批微信小程序在12月中下旬发布,在那之前,需要将已完成的小程序向腾讯提交审核。58到家看准了这次推广的机会,制定了小程序开发计
寒月十八
2018/01/30
7570
《微信小程序七日谈》- 第一天:人生若只如初见
WeChat 模块、模板与缓存
本次的系列博文的知识点讲解和代码,主要是来自于 七月老师 的书籍《微信小程序开发:入门与实践》,由个人总结并编写,关于更多微信小程序开发中的各项技能,以及常见问题的解决方案,还请大家购买书籍进行学习实践,该系列博文的发布已得到七月老师的授权许可
Nian糕
2018/08/21
1.3K0
WeChat 模块、模板与缓存
2019-面向小白的微信小程序-视频教学-基础
微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用
万少
2025/02/08
1760
2019-面向小白的微信小程序-视频教学-基础
微信小程序个人心得「建议收藏」
官方给出了app.json五个配置项列表.(pages(Array), window(Object), tabBar(Object), networkTimeout(Object), debug(Boolean)),接着我们就详细的分下一下这几个配置项.
全栈程序员站长
2022/11/04
1.9K0
微信小程序个人心得「建议收藏」
8、微信小程序免费视频教程之for
<text id="item-{{id}}"">{{content}}</text>
用户1272076
2019/03/26
1.1K0
推荐阅读
相关推荐
【愚公系列】《微信小程序与云开发从入门到实践》008-WXML与WXSS
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文