微信小程序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 history对象简单实现返回和前进
Oct 30 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
Jan 06 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
JavaScript Date 知识浅析
Jan 29 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 Javascript
详解angular 中的自定义指令之详解API
Jun 20 Javascript
基于iScroll实现内容滚动效果
Mar 21 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
vue实现全屏滚动效果(非fullpage.js)
Mar 07 Javascript
JS 基本概念详细介绍
Oct 16 Javascript
vue实现列表垂直无缝滚动
Apr 08 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遍历二维数组的代码
2011/04/22 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
jquery 图片轮换效果
2010/07/29 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
vue跨域解决方法
2017/10/15 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python中类的一些方法分析
2014/09/25 Python
Python如何判断数独是否合法
2016/09/08 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
高中同学聚会邀请函
2014/01/11 职场文书
机关门卫制度
2014/02/01 职场文书
司法局火灾防控方案
2014/06/05 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
2014年工会工作总结
2014/11/12 职场文书
2015年试用期工作总结
2014/12/12 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
python urllib库的使用详解
2021/04/13 Python