微信小程序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与flash交互通信基础教程
Aug 07 Javascript
基于jquery的商品展示放大镜
Aug 07 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
Bootstrap字体图标无法正常显示的解决方法
Oct 08 Javascript
bootstrap选项卡扩展功能详解
Jun 14 Javascript
ES6学习教程之对象字面量详解
Oct 09 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
Jun 29 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 Javascript
详解JavaScript 异步编程
Jul 13 Javascript
jquery插件懒加载的示例
Oct 24 jQuery
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
第五节--克隆
2006/11/16 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
介绍Python中的文档测试模块
2015/04/28 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
python能否java成为主流语言吗
2020/06/22 Python
python3.7添加dlib模块的方法
2020/07/01 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
教师实习自我鉴定
2013/12/13 职场文书
留学推荐信写作指南
2014/01/25 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书