微信小程序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 ui(接口)介绍
Sep 17 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 Javascript
深入理解JavaScript定时机制
Oct 29 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
vue开发心得和技巧分享
Oct 27 Javascript
TypeScript学习之强制类型的转换
Dec 27 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
Node.js爬取豆瓣数据实例分析
Mar 05 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 Javascript
JavaScript中的null和undefined用法解析
Sep 30 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中路径问题的解决方案
2006/10/09 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
PHP守护进程实例
2015/03/06 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Python二元算术运算常用方法解析
2020/09/15 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
电子专业毕业生自荐信
2014/05/25 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
改进工作作风心得体会
2016/01/23 职场文书
python flask框架快速入门
2021/05/14 Python
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android