微信小程序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 相关文章推荐
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
web 屏蔽BackSpace键实例代码
Dec 24 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 26 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 Javascript
vue实现井字棋游戏
Sep 29 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
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批量生成缩略图的代码
2008/07/19 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
网页打开自动最大化的js代码
2012/08/22 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
numpy数组拼接简单示例
2017/12/15 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python实现淘宝购物系统
2019/10/25 Python
python对XML文件的操作实现代码
2020/03/27 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
普通大学毕业生自荐信
2013/11/04 职场文书
婚假请假条怎么写
2014/04/10 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
硕士学位论文评语
2014/12/31 职场文书