|
来历:知乎
前序
微信小法式前端wx-for,界说了可循环结构,用于静态绑定序列化数据。js端供给的是JSON结构工具用于绑定。宫格块就是个例子,用一次wx-for即可。偶然辰会需要wx-for嵌套处理更复杂的循环。wx-for嵌套了解起来有点困难,此次给个例子。
<hr/>实现结果以下所示。风雅框是第一层模块结构,小方框是大的模块里面的第二层模块结构:
<hr/>index.wxml
index.wxml代码以下:
<view wx:for=&#34;{{OneArray}}&#34; wx:for-item=&#34;OneModuleObj&#34; wx:key=&#34;i&#34;>
<view class=&#34;HorizotalLine&#34;></view>
<view class=&#34;MainTitle&#34; >
{{OneModuleObj.title}}
</view>
<block wx:for=&#34;{{OneModuleObj.TowArray}}&#34; wx:for-item=&#34;TwoModuleObj&#34; wx:key=&#34;j&#34;>
<view class=&#39;prodView&#39;>
<view class=&#39;prodItemView&#39;>
<image class=&#39;prodImage&#39; src=&#34;{{TwoModuleObj.src}}&#34; />
<text class=&#39;prodText&#39;>{{TwoModuleObj.text}}</text>
</view>
</view>
</block>
</view>
{{OneArray}}、{{OneModuleObj.TowArray}}:代表第1层、第2层循环绑定的工具数组称号,在js中有对应。
wx:for-item=&#34;OneModuleObj&#34;、wx:for=&#34;{{OneModuleObj.TowArray}}&#34;:OneModuleObj、TwoModuleObj,1层循环、2层循环各项的工具称号,这样写主如果为了和js对应。默以为item。比如写成以下:
<view wx:for=&#34;{{OneArray}}&#34; wx:for-item=&#34;item&#34; wx:key=&#34;i&#34;>
<view class=&#34;HorizotalLine&#34;></view>
<view class=&#34;MainTitle&#34; >
{{item.title}}
</view>
<block wx:for=&#34;{{item.TowArray}}&#34; wx:for-item=&#34;item&#34; wx:key=&#34;j&#34;>
<view class=&#39;prodView&#39;>
<view class=&#39;prodItemView&#39;>
<image class=&#39;prodImage&#39; src=&#34;{{item.src}}&#34; />
<text class=&#39;prodText&#39;>{{item.text}}</text>
</view>
</view>
</block>
</view>这样也是可以的,js中并没出现item这个词,但能正确运转,正由于以item默许指定循环数组的各项。假如改成item1、item2就不可了。
OneModuleObj.title:取出第一层循环属性title的值。
TwoModuleObj.text:取出第二层循环属性text的值。
block:界说块,需要留意的是此处假如用view的话,不能实现横向排列,因view都是纵向排列的。
至于wx:key=&#34;i&#34;,这里没有用上其中的感化。
<hr/>index.wxss
界说页面元素的款式。index.wxss代码以下:
.MainTitle
{
margin-top: 30rpx;margin-bottom: 0rpx;text-align: center;font-size: 50rpx;font-weight: bolder;
}
.HorizotalLine{
height: 1px;background-color: lightgray;margin-left: 30rpx;margin-right: 30rpx;margin-top: 30rpx;
}
.prodView{
width: 150rpx;margin:35rpx 0rpx 0rpx 0rpx;
display:inline-flex;
flex-direction:row;
flex-wrap:wrap;
align-content:center;
justify-content:space-around;
}
.prodItemView {
width: 100rpx;
text-align: center;
}
.prodImage {
width: 85rpx;
height: 85rpx;
}
.prodText {
width: 150rpx;
margin-top: 20rpx;
font-size: 25rpx;
}
<hr/>index.js
index.wxss代码以下:
//index.js 力先示例
Page({
onLoad: function () {
const Class=&#39;printProductImages-印刷品-adProductImages-广告材料&#39;;
const ItemStr=&#39;visitingcard-名片-leaflet-宣传单-picturealbum-画册-membercard-会员卡-doubledraft-联单表格-adhesive-不干胶贴-envelope-信封-card-票券卡片-packet-封套-redpacket-红包喜帖-paperbag-纸袋纸盒-deskcalendar-台历挂历-sack-无纺布袋-adfan-广告扇&#39;
+&#39;|&#39;+
&#39;portrait-写真喷绘-displayrack-展架-rollupbanner-易拉宝-displayboard-展板-scroll-条幅横幅-colouredflags-彩旗-welcomebelt-迎宾带-workcard-工作牌-plaque-牌匾-signboard-标识-adword-广告字&#39;;
var OneArray = [];
var ModuleItemArray=ItemStr.split(&#39;|&#39;);
var ClassArray=Class.split(&#39;-&#39;);
var moduleLength=ModuleItemArray.length;
for(var i=0;i<moduleLength;i++)
{
var OneModuleObj={};
OneModuleObj.title=ClassArray[i*2+1];
var TowArray = [];
var PicPath=ClassArray[i*2];
var ItemArray=ModuleItemArray.split(&#39;-&#39;);
var ItemArrayLength=ItemArray.length/2;
for(var j=0;j<ItemArrayLength;j++)
{
var TwoModuleObj={};
TwoModuleObj.src=PicPath+&#39;/&#39;+ItemArray[j*2]+&#39;-&#39;+ItemArray[j*2+1]+&#39;.jpg&#39;;//改成现实
TwoModuleObj.text=ItemArray[j*2+1];
TowArray.push(TwoModuleObj);
}
OneModuleObj.TowArray=TowArray;
OneArray.push(OneModuleObj);
}
console.log(OneArray);
this.setData({
OneArray: OneArray
});
},
})
机关JSON数组工具,将字符串朋分,赋值给JSON工具的各属性值,绑定到页面。
var OneArray =[]:界说顶层(第一层)的数组工具。与index.wxml中的{{OneArray}}对应。
var OneModuleObj={}:界说OneArray 数组的序列工具。
OneArray.push(OneModuleObj):将界说的序列工具加入到数组OneArray中。
this.setData({OneArray: OneArray}):将前台的OneArray赋值以这里界说的OneArray数组。
输出成果为:
console.log(OneArray);
改成:
console.log(JSON.stringify(OneArray,null,2));
便可以获得OneArray的JSON结构化字符串。将该字符串间接写为工具也是可以的。以下代码:
//index.js
Page({
OneArray:[
{
&#34;title&#34;: &#34;印刷品&#34;,
&#34;TowArray&#34;: [
{
&#34;src&#34;: &#34;printProductImages/visitingcard-名片.jpg&#34;,
&#34;text&#34;: &#34;名片&#34;
},
{
&#34;src&#34;: &#34;printProductImages/leaflet-宣传单.jpg&#34;,
&#34;text&#34;: &#34;宣传单&#34;
},
{
&#34;src&#34;: &#34;printProductImages/picturealbum-画册.jpg&#34;,
&#34;text&#34;: &#34;画册&#34;
},
{
&#34;src&#34;: &#34;printProductImages/membercard-会员卡.jpg&#34;,
&#34;text&#34;: &#34;会员卡&#34;
},
{
&#34;src&#34;: &#34;printProductImages/doubledraft-联单表格.jpg&#34;,
&#34;text&#34;: &#34;联单表格&#34;
},
{
&#34;src&#34;: &#34;printProductImages/adhesive-不干胶贴.jpg&#34;,
&#34;text&#34;: &#34;不干胶贴&#34;
},
{
&#34;src&#34;: &#34;printProductImages/envelope-信封.jpg&#34;,
&#34;text&#34;: &#34;信封&#34;
},
{
&#34;src&#34;: &#34;printProductImages/card-票券卡片.jpg&#34;,
&#34;text&#34;: &#34;票券卡片&#34;
},
{
&#34;src&#34;: &#34;printProductImages/packet-封套.jpg&#34;,
&#34;text&#34;: &#34;封套&#34;
},
{
&#34;src&#34;: &#34;printProductImages/redpacket-红包喜帖.jpg&#34;,
&#34;text&#34;: &#34;红包喜帖&#34;
},
{
&#34;src&#34;: &#34;printProductImages/paperbag-纸袋纸盒.jpg&#34;,
&#34;text&#34;: &#34;纸袋纸盒&#34;
},
{
&#34;src&#34;: &#34;printProductImages/deskcalendar-台历挂历.jpg&#34;,
&#34;text&#34;: &#34;台历挂历&#34;
},
{
&#34;src&#34;: &#34;printProductImages/sack-无纺布袋.jpg&#34;,
&#34;text&#34;: &#34;无纺布袋&#34;
},
{
&#34;src&#34;: &#34;printProductImages/adfan-广告扇.jpg&#34;,
&#34;text&#34;: &#34;广告扇&#34;
}
]
},
{
&#34;title&#34;: &#34;广告材料&#34;,
&#34;TowArray&#34;: [
{
&#34;src&#34;: &#34;adProductImages/portrait-写真喷绘.jpg&#34;,
&#34;text&#34;: &#34;写真喷绘&#34;
},
{
&#34;src&#34;: &#34;adProductImages/displayrack-展架.jpg&#34;,
&#34;text&#34;: &#34;展架&#34;
},
{
&#34;src&#34;: &#34;adProductImages/rollupbanner-易拉宝.jpg&#34;,
&#34;text&#34;: &#34;易拉宝&#34;
},
{
&#34;src&#34;: &#34;adProductImages/displayboard-展板.jpg&#34;,
&#34;text&#34;: &#34;展板&#34;
},
{
&#34;src&#34;: &#34;adProductImages/scroll-条幅横幅.jpg&#34;,
&#34;text&#34;: &#34;条幅横幅&#34;
},
{
&#34;src&#34;: &#34;adProductImages/colouredflags-彩旗.jpg&#34;,
&#34;text&#34;: &#34;彩旗&#34;
},
{
&#34;src&#34;: &#34;adProductImages/welcomebelt-迎宾带.jpg&#34;,
&#34;text&#34;: &#34;迎宾带&#34;
},
{
&#34;src&#34;: &#34;adProductImages/workcard-工作牌.jpg&#34;,
&#34;text&#34;: &#34;工作牌&#34;
},
{
&#34;src&#34;: &#34;adProductImages/plaque-牌匾.jpg&#34;,
&#34;text&#34;: &#34;牌匾&#34;
},
{
&#34;src&#34;: &#34;adProductImages/signboard-标识.jpg&#34;,
&#34;text&#34;: &#34;标识&#34;
},
{
&#34;src&#34;: &#34;adProductImages/adword-广告字.jpg&#34;,
&#34;text&#34;: &#34;广告字&#34;
}
]
}
],
onLoad: function () {
this.setData({
OneArray:this. OneArray
});
},
})
结语
本案例分析小法式wx-for两层嵌套的方式。关键就是wx:for-item的写法。多层嵌套可以参考此方式。
原文地址:https://zhuanlan.zhihu.com/p/612759293
免责声明:
1、文章部分图片源于收集,均为表示图;
2、一切文章、图片、音频视频文件等材料版权归版权一切人一切;
3、因非原创文章及图片等内容没法和版权者联系,如原作者或编辑以为作品不宜上网供阅读,或不应无偿利用,请实时告诉我们,以敏捷采纳适当办法,避免给双方形成不需要的经济损失;
4、本页面内容由爬虫法式自动收集于互联网,如无意中加害了媒体或小我的常识产权,请电邮【E-Mail:cb@yoyodoc.com】告之,我们将于24小时内删除。 |
|