WXML模板语法-条件渲染和列表渲染

简介: 本文档介绍了微信小程序中的条件渲染和列表渲染。条件渲染主要使用`wx:if`、`wx:elif`、`wx:else`和`hidden`属性。`wx:if`通过判断表达式决定是否渲染代码块,而`hidden`通过切换CSS的`display`属性控制元素隐藏。两者在性能和使用场景上有区别,频繁切换推荐使用`hidden`,复杂条件推荐使用`wx:if`。列表渲染则利用`wx:for`遍历数组生成列表,可以通过`wx:for-index`和`wx:for-item`自定义索引和项的变量名,同时需使用`wx:key`为列表项指定唯一标识以优化渲染效率。

一、条件渲染


1.wx:if


在小程序中,使用wx:if="{{condition}}"来判断是否需要渲染该代码块,也可以用wx:elif和wx:else来添加else判断


// pages/list/list.js
Page({
  data: {
    type:1
  }
})


<!--pages/list/list.wxml-->
 
<view wx:if="{{type === 1}}"> True </view>
<view wx:elif="{{type === 2}}"> False </view>
<view wx:else> 0 </view>


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


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


<!--pages/list/list.wxml-->
 
<block wx:if="{{type === 1}}">
  <view> view1 </view>
  <view> view2 </view>
</block>


注意:<block>并不是一个组件,它只是一个包裹性质的容器,不会在页面中做任何渲染


3.hidden


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


// pages/list/list.js
Page({
  data: {
    flag:true
  }
})


<!--pages/list/list.wxml-->
<view hidden="{{flag}}"> 条件为true的时候隐藏元素,否则显示</view>


4.wx:if和hidden对比


(1)运行方式不同


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


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


(2)使用建议:


频繁切换时,使用hidden


控制条件复杂时,使用wx:if


二、列表渲染


1.wx:for


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


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


// pages/list/list.js
Page({
  data: {
    arr1:[1,2,3,4,5]
  }
})


<!--pages/list/list.wxml-->
<view wx:for="{{arr1}}">
  索引是:{{index}},item项是:{{item}}
</view>


2.手动指定索引和当前项的变量名*


(在实际开发中用到的不多)


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


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


<!--pages/list/list.wxml-->
<view wx:for="{{arr1}}" wx:for-index="idx" wx:for-item="itemName">
  索引是:{{idx}},item项是:{{itemName}}
</view>


3.wx:key 的使用


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


// pages/list/list.js
Page({
  data: {
    userList:[
      {id:1,name:'小红'},
      {id:2,name:'小明'},
      {id:3,name:'小白'},
    ]
  }
})


<!--pages/list/list.wxml-->
<view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>


注意在指定key的时候,外面不用包Mustache语法,直接将对应的key值填充过来即可

目录
相关文章
|
数据挖掘 索引
RNA-seq数据分析一:(HISAT2+featureCounts)
RNA-seq数据分析一:(HISAT2+featureCounts)
|
Linux 虚拟化
VMware安装Linux虚拟机之NAT模式网络配置图文详解
VMware安装Linux虚拟机之NAT模式网络配置图文详解
809 0
|
监控 Shell Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
347 0
|
5月前
|
传感器 API Android开发
雷电模拟器防检测工具, 模拟器防检测 伪装手机,安卓模拟器防检测工具
硬件特征检测通过CPUID指令和显卡信息判断虚拟环境110 系统环境检测通过查找模拟器特有文件和进程112
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能土壤质量监测与管理
使用Python实现深度学习模型:智能土壤质量监测与管理
686 69
|
数据采集 前端开发 JavaScript
动态与静态网站抓取的区别:从抓取策略到性能优化
本文详细介绍了动态与静态网站抓取的区别、抓取策略及性能优化技巧,并提供了相关代码示例。静态网站抓取通过简单的HTTP请求和解析库实现,而动态网站则需使用Selenium等工具模拟浏览器执行JavaScript。文章还展示了如何使用代理IP、多线程和合理的请求头设置来提高抓取效率。
507 2
动态与静态网站抓取的区别:从抓取策略到性能优化
|
数据采集 Dart Apache
Github 2024-05-07 Python开源项目日报 Top10
在2024年5月7日的Github Trendings中,Python开源项目占据主导,共有10个项目上榜。其中热门项目包括:yt-dlp,一个增强版的youtube-dl分支,具有64K+星标;Home Assistant,专注本地控制和隐私的开源家庭自动化项目,拥有65K+星标;以及openpilot,一个开源驾驶辅助系统,支持多种车型,45K+星标。其他项目涵盖爬虫工具、实时应用框架Flet、可观测性平台Logfire等,涉及Python、Dart和C++等多种语言。
855 10
|
分布式计算 DataWorks Oracle
MaxCompute产品使用合集之如何创建表
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
349 7
|
Ubuntu Docker 容器
迁移harbor
在Ubuntu 22.04 LTS环境中,已安装Docker的Harbor从v2.5.3迁移到v2.9.0,保留原有镜像数据。参考官方文档[v2.9.0](https://goharbor.io/docs/2.9.0/),执行包括数据目录复制、解压新版本、配置harbor.yml和docker-compose.yml、运行安装脚本等步骤。迁移后,通过测试推拉镜像确保功能正常。注意查看潜在的部署问题。
379 0
|
SQL 存储 分布式计算
Kylin使用心得:从入门到进阶的探索之旅
【5月更文挑战第2天】Apache Kylin是开源大数据分析平台,提供亚秒级OLAP查询。本文深入解析Kylin的工作原理,包括预计算模型Cube、构建过程和查询引擎。常见问题涉及Cube设计、查询性能和资源管理,解决方案涵盖合理设计、性能监控和测试验证。文中还分享了Cube创建的JSON示例,并探讨了Cube构建优化、查询优化、与其他组件集成、监控维护及生产环境问题解决。通过学习和实践,读者能有效提升数据洞察力和决策效率。
740 5