前言

入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉。

<view wx:for="{{items}}">{{index}}: {{item.message}}
</view>

还有一个九九乘法表把数据直接写到wxml里的,并不是动态二维数组的列表渲染。

<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>

那么今天,我们主要来讲讲动态多维数组和对象混合的列表渲染。

''

讲解

何为多维数组和对象混合,给个很简单的例子

 twoList:[{id:1,name:'应季鲜果',count:1,twodata:[{'id':11,'name':'鸡脆骨'},{'id':12,'name':'鸡爪'}]},{id:2,name:'精致糕点',count:6,twodata:[{'id':13,'name':'羔羊排骨一条'},{'id':14,'name':'微辣'}]}]

上述例子就是一个数组,这都是我们日常开发过程中,经常会碰到的JSON格式,
该数组的元素是有对象,对象又分为属性,属于数组对象混合,可能对于刚接触小程序的童鞋,碰到这种数组对象混合的就会发难了。

一层循环

    oneList:[{id:1,name:'应季鲜果',count:1},{id:2,name:'精致糕点',count:6},{id:3,name:'全球美食烘培原料',count:12},{id:4,name:'无辣不欢生猛海鲜',count:5}]

以上数组对象混合JSON,是测试只有一层循环的,我们看看在wxml里怎么循环,我们先看一下要循环渲染到页面上的效果图。

''

<view wx:for="{{oneList}}"  wx:key="id">{{index+1}}、{{item.name}}
</view>

我们可以看到,这里直接用两个花括号来给view 循环列表,注意强调一下,请记得一下要用 两个花括号数据起来,如果不包起来,view也会循环出来,但并不是自己要循环的数据,而且是给了一个假象给你以为是有循环了,这里开发工具有点坑人的感觉,这个还需要多细心点,这里记住一点,只要是有数据的,就需要花括号。
另外默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item,同时我这里也顺道演示了如何使用数组变量名和下标。

二层循环

''

JSON代码

     twoList:[{id:1,name:'应季鲜果',count:1,twodata:[{'id':11,'name':'鸡脆骨'},{'id':12,'name':'鸡爪'}]},{id:2,name:'精致糕点',count:6,twodata:[{'id':13,'name':'羔羊排骨一条'},{'id':14,'name':'微辣'}]},{id:3,name:'全球美食烘培原料',count:12,twodata:[{'id':15,'name':'秋刀鱼'},{'id':16,'name':'锡箔纸金针菇'}]}]

wxml代码

        <view class="pad10" wx:for="{{twoList}}" wx:key="id"><view>{{index+1}}、{{item.name}}</view><view wx:for="{{item.twodata}}" wx:for-item="twodata" wx:key="id">----{{twodata.name}}---{{item.name}}</view></view>

以上截图和代码是二层嵌套内容。
我们在wxml代码里,很明显的看到有两个wx:for的控制属性,在二层循环的JSON代码里,我们看每个单数组里还有一级数据twodata,这里是需要再循环渲染到页面上的,在第一层数据里,直接再循环item.twodata即可,请记得一定要带上花括号。
在第二层的循环里,建议把当前项的变量名改为其他,即在wxml代码里看到的wx:for-item="twodata",因为默认的当前项的变量名为item,如果不改换其他的话,你是拿不到第一层循环的数据的,因为被第二层的变量名覆盖了。
所以我们在wxml代码里,在第二层循环时,可以看到还可以循环第一层的值,即----{{twodata.name}}---{{item.name}}

三层以上的多层循环

三层以上的多层的数组循环,在原理上同二层循环是一样的,能理解了二层数组循环,对于三层以及三层以上都能得心应用的。
需要注意的地方,那就是老生常谈的问题了,数据需要用花括号括起来,从第二层起,把默认的当前项的变量名改为其他,例如wx:for-item="twodata",还有细心再细心。

wx:key唯一标识符

为什么会有wx:key的出现呢,官方给的解释是,如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 input 中的输入内容,switch 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。
当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。
在开发过程中,wx:key的作用对于项目作用是非常大的,如果从文字上无法理解的童鞋,可以到github clone demo到微信开发工具里,亲自体验下。

''

我们看到这个GIF动画图,这里有一个switch的开启状态,switch的状态是在标题为羔羊排骨一条的,在对这个数组增加数据时,这个switch的状态并不跟随着羔羊排骨一条,并不保持自己的状态。

那我们再看另一个例子,使用了wx:key唯一标识符。

''

这个GIF动画图,也是点击开启了switch的状态,唯一有不同的地方,就是在新增数据时,是保持着自己的状态的。
相信通过这两个小例子,对wx:key唯一标识符应该也有所了解啦,想要提升技术,就要多折腾,自己在小程序里,写个wx:forwx:key 体会下。

还有一个需要注意的地方,我们先看看以下代码

<view class="pad10" wx:for="{{twoList}}" wx:key="id">
</view>

wx:key="id",我们看到wx:key里的值并不需要花括号的,是的,这里是比较特别的地方,不需要花括号,同时也不需要参数名,需要是虽然数据里的一个字段名。

结束语

今天我们讲了列表渲染,官方给的文档还是比较简单单一,我们这里更深入的讲了数组的一层、二层以及多层循环,还有wx:key唯一标识符的使用方法和注意事项。

相信在小程序推出公测之后,很多小伙伴都已经抓紧申请注册小程序了。在开发阶段中也碰到了很多的问题,例如wx.request数据请求不成功,在数组操作时,不知道如何往数组里push数据,input如何监听用户输入的状态,css的background-image无法获取本地资源等等,本博客会出一个专题,给碰到这些问题的小伙伴解决思路。

demo github地址:
https://github.com/bluefox1688/wxapp_study

交流平台

作者:蓝狐锅锅
链接:https://www.jianshu.com/p/87cdf985b2b9
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

文章首发地址:
列表渲染多层嵌套循环及wx:key的使用--微信小程序入门教程
http://lanchenglv.com/article/2016/1124/wxapp_list_foreach.html
如需转载,请标明转载出处,谢谢。

微信小程序入门教程---列表渲染多层嵌套循环及wx:key的使用(双层for循环)相关推荐

  1. 从零开始的微信小程序入门教程(一)

    从零开始的微信小程序入门教程(一) 之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践 ...

  2. 微信小程序入门教程+案例demo

    微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...

  3. 从零开始的微信小程序入门教程

    之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...

  4. 微信小程序入门教程 --(保姆级)

    一.小程序注册 1.首先,到小程序官网注册自己的小程序账号,以下附有地址和教程: 小程序官网 进入这个地址之后,会看到这样的页面,点击立即注册按钮 2.在接下来的页面,选择小程序 3.然后根据提示完成 ...

  5. 微信小程序入门教程学习笔记

    写在前面: 作为一个刚刚入坑微信小程序的小白,以下是我在学习中的笔记,因为我真的太健忘了... 文章中可能会有错误,但是我会不断的修正的. 谢谢浏览,如有错误烦请指正 (≧∀≦)ゞ 微信官方的小程序开 ...

  6. 开发微信小程序入门教程,含破解工具

    2016年09月21日晚 微信发不了微信"小程序"的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联网的一猿,我们怎能不紧跟时代的脚步.于是第二天上午也 ...

  7. uniapp开发写了key 但微信小程序时警告-Now you can provide attr `wx:key` for a `wx:for` to improve performance.

    我这里碰见了两种造成这个问题的错误 第一种 :key="Ditem.did" 给了key值,但是变量写错,key值是undefined, 解决方案,给一个正确的值,而且值唯一 第二 ...

  8. 微信小程序开发——消除Now you can provide attr `wx:key` for a `wx:for` to improve performance.

    在开发微信小程序的是遇到了WXML Runtime warning:Now you can provide attrwx:key for awx:forto improve performance. ...

  9. 微信小程序入门教程之三:脚本编程

    这个系列教程的前两篇,介绍了小程序的项目结构和页面样式. 今天,接着往下讲,教大家为小程序加入 JavaScript 脚本,做出动态效果,以及如何跟用户互动.学会了脚本,就能做出复杂的页面了. 本篇的 ...

最新文章

  1. golang实现给图片加水印
  2. String、StringBuffer、StringBuilder的理解
  3. 清华「暗黑破坏神」夺超算世界冠军,暨南大学首次参赛就跻身前三 | ISC21
  4. MLNLP顶会论文发表总榜:谷歌最狂,清北入前十,周明、张岳、刘挺华人前三...
  5. 简单dfs序 + 树链剖分
  6. 安卓开发toolbar设置logo_Android之ToolBar的使用
  7. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder
  8. 信息学奥赛一本通 1319:【例6.1】排队接水 | 洛谷 P1223 排队接水
  9. 用‘栈’的思想编写一个十进制转换二进制、八进制或十六进制的程序
  10. HAProxy.md
  11. 社区团购如今进行得如火如荼
  12. vscode 文件夹中查找_真香!使用 VSCode 进行远程开发调试
  13. 如何提高数据分析的效率
  14. php exeil导入,反编译工具ILSpy.exe
  15. brew mysql_brew mysql
  16. 【String-easy】551. Student Attendance Record I 学生迟到和旷课
  17. 条条道路通罗马感受古罗马帝国的辉煌时代!
  18. AcWing蓝桥杯AB组辅导课10、疑难杂题
  19. ORACLE FORMS BUILDER的布局和常用ITEMS
  20. linux 内核调试 booting the kernel.,Linux无法启动解决 booting the kernel.

热门文章

  1. Java后台phantomjs导出复杂图表PDF
  2. 知乎热议:那些35岁失业的中年人,后来都怎么样了?
  3. ASEMI四脚整流桥KBP210实物图,KBP210整流桥接线图
  4. “C语言“ 之 特工的单向通信网络
  5. python 创建一定区间内的满足正态分布的随机数
  6. Adobe Flash Player 本地播放器
  7. 智慧路灯远程智能控制
  8. 【iOS与EV3混合机器人编程系列之7】通过蓝牙控制EV3
  9. throttle debounce节流防抖(uniapp)
  10. mysql写入一句话木马