微信小程序wx:for循环的实例详解


Posted in Javascript onOctober 07, 2018

列表渲染

wx:for

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

<view wx:for="{{array}}">
 {{index}}: {{item.message}}
</view>

Page({
 data: {
  array: [{
   message: 'foo',
  }, {
   message: 'bar'
  }]
 }
})

使用 wx:for-item 可以指定数组当前元素的变量名,

使用 wx:for-index 可以指定数组当前下标的变量名:

<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
 {{idx}}: {{itemName.message}}
</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>

block wx:for

类似 block wx:if,也可以将 wx:for 用在标签上,以渲染一个包含多节点的结构块。例如:

<block wx:for="{{[1, 2, 3]}}">
 <view> {{index}}: </view>
 <view> {{item}} </view>
</block>

wx:key

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如  中的输入内容, 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。

wx:key 的值以两种形式提供

字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。
示例代码:

<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;"> {{item.id}} </switch>
<button bindtap="switch"> Switch </button>
<button bindtap="addToFront"> Add to the front </button>
<switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;"> {{item}} </switch>
<button bindtap="addNumberToFront"> Add to the front </button>

Page({
 data: {
  objectArray: [
   {id: 5, unique: 'unique_5'},
   {id: 4, unique: 'unique_4'},
   {id: 3, unique: 'unique_3'},
   {id: 2, unique: 'unique_2'},
   {id: 1, unique: 'unique_1'},
   {id: 0, unique: 'unique_0'},
  ],
  numberArray: [1, 2, 3, 4]
 },
 switch: function(e) {
  const length = this.data.objectArray.length
  for (let i = 0; i < length; ++i) {
   const x = Math.floor(Math.random() * length)
   const y = Math.floor(Math.random() * length)
   const temp = this.data.objectArray[x]
   this.data.objectArray[x] = this.data.objectArray[y]
   this.data.objectArray[y] = temp
  }
  this.setData({
   objectArray: this.data.objectArray
  })
 },
 addToFront: function(e) {
  const length = this.data.objectArray.length
  this.data.objectArray = [{id: length, unique: 'unique_' + length}].concat(this.data.objectArray)
  this.setData({
   objectArray: this.data.objectArray
  })
 },
 addNumberToFront: function(e){
  this.data.numberArray = [ this.data.numberArray.length + 1 ].concat(this.data.numberArray)
  this.setData({
   numberArray: this.data.numberArray
  })
 }
})

注意:

当 wx:for 的值为字符串时,会将字符串解析成字符串数组

<view wx:for="array">
 {{item}}
</view>

等同于

<view wx:for="{{['a','r','r','a','y']}}">
 {{item}}
</view>

注意: 花括号和引号之间如果有空格,将最终被解析成为字符串

<view wx:for="{{[1,2,3]}} ">
 {{item}}
</view>

等同于

<view wx:for="{{[1,2,3] + ' '}}" >
 {{item}}
</view>

总结

以上所述是小编给大家介绍的微信小程序wx:for循环,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
javascript 年月日联动实现核心代码
Dec 21 Javascript
JQuery动态创建DOM、表单元素的实现代码
Aug 09 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
异步javascript的原理和实现技巧介绍
Nov 08 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
js 中获取制定的cook信息实现方法
Nov 19 Javascript
微信小程序实现多个按钮的颜色状态转换
Feb 15 Javascript
Vue开发之封装上传文件组件与用法示例
Apr 25 Javascript
Node.js之删除文件夹(含递归删除)代码实例
Sep 09 Javascript
详解小程序如何改变onLoad的执行时机
Nov 01 Javascript
Ajax请求超时与网络异常处理图文详解
May 23 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 #Javascript
Vue面试题及Vue知识点整理
Oct 07 #Javascript
解决vue无法设置滚动位置的问题
Oct 07 #Javascript
cdn模式下vue的基本用法详解
Oct 07 #Javascript
vue实现添加与删除图书功能
Oct 07 #Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 #Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 #Javascript
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
跟老齐学Python之永远强大的函数
2014/09/14 Python
python查询mysql中文乱码问题
2014/11/09 Python
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
对python字典过滤条件的实例详解
2019/01/22 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
python处理excel绘制雷达图
2019/10/18 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
教师年度考核个人总结
2015/02/12 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python