您好,登錄后才能下訂單哦!
這篇文章主要介紹微信開發(fā)之如何實現(xiàn)列表渲染多層嵌套循環(huán),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
undefined
示例:
<view wx:for="{{items}}"> {{index}}: {{item.message}} </view>
還有一個九九乘法表把數(shù)據(jù)直接寫到wxml里的,并不是動態(tài)二維數(shù)組的列表渲染。
<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>
那么今天,我們主要來講講動態(tài)多維數(shù)組和對象混合的列表渲染。
何為多維數(shù)組和對象混合,給個很簡單的例子
twoList:[{ id:1, name:'應(yīng)季鮮果', count:1, twodata:[{ 'id':11, 'name':'雞脆骨' },{ 'id':12, 'name':'雞爪' }] },{ id:2, name:'精致糕點', count:6, twodata:[{ 'id':13, 'name':'羔羊排骨一條' },{ 'id':14, 'name':'微辣' }] }]
上述例子就是一個數(shù)組,這都是我們?nèi)粘i_發(fā)過程中,經(jīng)常會碰到的JSON格式,
該數(shù)組的元素是有對象,對象又分為屬性,屬于數(shù)組對象混合,可能對于剛接觸小程序的童鞋,碰到這種數(shù)組對象混合的就會發(fā)難了。
oneList:[{ id:1, name:'應(yīng)季鮮果', count:1 },{ id:2, name:'精致糕點', count:6 },{ id:3, name:'全球美食烘培原料', count:12 },{ id:4, name:'無辣不歡生猛海鮮', count:5 }]
以上數(shù)組對象混合JSON,是測試只有一層循環(huán)的,我們看看在 wxml 里怎么循環(huán),我們先看一下要循環(huán)渲染到頁面上的效果圖。
<view wx:for="{{oneList}}"wx:key="id"> {{index+1}}、{{item.name}} </view>
我們可以看到,這里直接用兩個花括號來給 view 循環(huán)列表,注意強調(diào)一下,請記得一下要用 兩個花括號數(shù)據(jù)起來,如果不包起來, view 也會循環(huán)出來,但并不是自己要循環(huán)的數(shù)據(jù),而且是給了一個假象給你以為是有循環(huán)了,這里開發(fā)工具有點坑人的感覺,這個還需要多細心點,這里記住一點,只要是有數(shù)據(jù)的,就需要花括號。
另外默認數(shù)組的當前項的下標變量名默認為index,數(shù)組當前項的變量名默認為item,同時我這里也順道演示了如何使用數(shù)組變量名和下標。
JSON代碼
twoList:[{ id:1, name:'應(yīng)季鮮果', 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>
以上截圖和代碼是二層嵌套內(nèi)容。
我們在wxml代碼里,很明顯的看到有兩個 wx:for 的控制屬性,在二層循環(huán)的JSON代碼里,我們看每個單數(shù)組里還有一級數(shù)據(jù) twodata ,這里是需要再循環(huán)渲染到頁面上的,在第一層數(shù)據(jù)里,直接再循環(huán) item.twodata 即可,請記得一定要帶上花括號。
在第二層的循環(huán)里,建議把當前項的變量名改為其他,即在wxml代碼里看到的 wx:for-item="twodata" ,因為默認的當前項的變量名為 item ,如果不改換其他的話,你是拿不到第一層循環(huán)的數(shù)據(jù)的,因為被第二層的變量名覆蓋了。
所以我們在wxml代碼里,在第二層循環(huán)時,可以看到還可以循環(huán)第一層的值,即 ------- 。
三層以上的多層的數(shù)組循環(huán),在原理上同二層循環(huán)是一樣的,能理解了二層數(shù)組循環(huán),對于三層以及三層以上都能得心應(yīng)用的。
需要注意的地方,那就是老生常談的問題了,數(shù)據(jù)需要用花括號括起來,從第二層起,把默認的當前項的變量名改為其他,例如 wx:for-item="twodata" ,還有細心再細心。
為什么會有 wx:key 的出現(xiàn)呢,官方給的解釋是,如果列表中項目的位置會動態(tài)改變或者有新的項目添加到列表中,并且希望列表中的項目保持自己的特征和狀態(tài)(如 input 中的輸入內(nèi)容, switch 的選中狀態(tài)),需要使用 wx:key 來指定列表中項目的唯一的標識符。
當數(shù)據(jù)改變觸發(fā)渲染層重新渲染的時候,會校正帶有 key 的組件,框架會確保他們被重新排序,而不是重新創(chuàng)建,以確保使組件保持自身的狀態(tài),并且提高列表渲染時的效率。
在開發(fā)過程中, wx:key 的作用對于項目作用是非常大的,如果從文字上無法理解的童鞋,可以到github clone demo到微信開發(fā)工具里,親自體驗下。
我們看到這個GIF動畫圖,這里有一個 switch 的開啟狀態(tài), switch 的狀態(tài)是在標題為 羔羊排骨一條 的,在對這個數(shù)組增加數(shù)據(jù)時,這個 switch 的狀態(tài)并不跟隨著 羔羊排骨一條 ,并不保持自己的狀態(tài)。
那我們再看另一個例子,使用了wx:key唯一標識符。
這個GIF動畫圖,也是點擊開啟了 switch 的狀態(tài),唯一有不同的地方,就是在新增數(shù)據(jù)時,是保持著自己的狀態(tài)的。
相信通過這兩個小例子,對wx:key唯一標識符應(yīng)該也有所了解啦,想要提升技術(shù),就要多折騰,自己在小程序里,寫個 wx:for 和 wx:key 體會下。
還有一個需要注意的地方,我們先看看以下代碼
<view class="pad10"wx:for="{{twoList}}"wx:key="id"> </view>
wx:key="id" ,我們看到 wx:key 里的值并不需要花括號的,是的,這里是比較特別的地方,不需要花括號,同時也不需要參數(shù)名,需要是雖然數(shù)據(jù)里的一個字段名。
以上是“微信開發(fā)之如何實現(xiàn)列表渲染多層嵌套循環(huán)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。