微信小程序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可见性过滤选择器使用示例
Jun 24 Javascript
JavaScript对象的property属性详解
Apr 01 Javascript
javascript中clone对象详解
Dec 03 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
JS中的数组方法笔记整理
Jul 26 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
js数组实现权重概率分配
Sep 12 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
Jun 19 Javascript
JS实现联想、自动补齐国家或地区名称的功能
Jul 07 Javascript
vue组件开发之slider组件使用详解
Aug 21 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结合Ueditor并修改图片上传路径
2016/10/16 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python 爬虫的工具列表大全
2016/01/31 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
python3实现名片管理系统
2020/11/29 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
高级人员简历的自我评价分享
2013/11/03 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
virtualenv隔离Python环境的问题解析
2022/06/21 Python