微信小程序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 相关文章推荐
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
js中回调函数的学习笔记
Jul 31 Javascript
JS通过ajax动态读取xml文件内容的方法
Mar 24 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
BootStrap实现轮播图效果(收藏)
Dec 30 Javascript
JS实现根据密码长度显示安全条功能
Mar 08 Javascript
老生常谈js-react组件生命周期
May 02 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
layui框架中layer父子页面交互的方法分析
Nov 15 Javascript
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 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
PHP输入流php://input介绍
2012/09/18 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
JS的get和set使用示例
2014/02/20 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
用JS实现简单的登录验证功能
2017/07/28 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Python字符串内置函数功能与用法总结
2019/04/16 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
心得体会怎么写
2013/12/30 职场文书
个人债务授权委托书
2014/10/17 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
公司搬迁通知
2015/04/20 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
2015年市场部工作总结
2015/04/30 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
mysql脏页是什么
2021/07/26 MySQL
python中的sys模块和os模块
2022/03/20 Python