微信小程序 wxml文件中嵌套循环

微信小程序 wxml文件中嵌套循环,第1张

1、服务器获取到的数组中嵌套 对象组成的数组,控制台输出:

2、解析并绑定服务器获取到的数据,js文件:

3、绑定一层的shopList数据, wxml文件:

4、绑定shopList数组中的二层equips数据,wxml文件 中 只需要itemequips即可

最开始循环获取到数据后,总以为需要嵌套循环出二层数组对象,并分别绑定数据。兜兜转转绕了一大圈,发现只要将一级数组循环获取到,二层数组对象直接“itemxxx”就可以在wxml文件中直接进行数据绑定了。 

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。即wx:for指令用于循环数组数据,生成组件。

循环出来的每一项通过item返回,每一项对应的索引,通过index返回。

wx:key="",设置每一项唯一的标识。循环列表时,添加wx:key的好处是,将来列表发生变化时重新渲染列表的损耗为更低。

使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名:

条件渲染可以使用 wx:if 或 hidden 。

一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好;如果在运行时条件不大可能改变,则 wx:if 较好。

wx:if用于条件渲染:条件为真生成里面的内容,条件为假不会生成里面的内容。(每次重新生成内容)

也可以用 wx:elif 和 wx:else 来添加一个 else 块。

hidden用于条件渲染:条件为真隐藏里面的内容,条件为假显示里面的内容。(每次切换样式)

在appjson文件中添加tabBar节点。tabBar是小程序客户端底部或顶部tab栏的实现。

color: tab上的文字默认颜色,仅支持十六进制颜色。

selectedColor: tab上的文字选中时的颜色,仅支持十六进制颜色。

backgroundColor: tab的背景色,仅支持十六进制颜色。

borderStyle: tabbar上边框的颜色, 仅支持 black / white。

position: tabBar的位置,默认值是: bottom,仅支持 bottom / top。当 position 为 top 时,不显示 icon。

custom: 自定义tabBar。

list是一个数组,它定义了tab的列表。只能配置最少2个、最多5个tab。

pagePath: 页面路径,必须在 pages 中先定义。

text: tab 上按钮文字。

iconPath: 路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。

selectedIconPath: 选中时的路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。

跳转到普通页,可以直接通过返回按钮返回。

navigateTo()方法,用于跳转普通页面。可以直接通过返回按钮返回。

页面js文件中添加方法:

redirectTo()方法,关闭当前页面再跳转到指定页,不能通过返回按钮返回页面。该方法不能用于跳转tabBar页面。

页面js文件中添加方法:

跳转到tabBar页面,通过tabBar按钮返回。

如果要使用navigator组件跳转tabBar页面,需要设置open-type="switchTab"。

switchTab()方法,用于跳转tabBar页面。

页面js文件中添加方法:

标签数据在data中定义, 因为还要点击高亮, 所以同时给个状态值

页面循环渲染出来

点击事件bindtap='select',

绑定class: class="{{itemisSelect'active':'select'}}", 点击的时候改变类名

自定义dataset :data-index="{{index}}"

样式效果

JS部份

到这儿, 高亮的就已经写好了 怎么取值呢 下面还有一个保存按钮 给保存按钮一个点击事件:

1定义一个空数据

2遍历上边的data里的selectall数组, 传两个参数, v是所有标签的状态(比如isSelect:false或isSelect:true), i是下标

看打印结果

1、请求获取的数据赋值给页面data中;

2、页面 wx:for循环输出 并每个item中添加bindtap点击事件 clickid(itemid)

3、js中clickid点击事件中 就拿到id了

clickid(id){

consolelog(id)

}

1使用内置组件scroll-view

2实现点击时出现的背景样式

3使用scroll-into-view,实现点击时自动滚动

前言

本次主要内容是介绍页面tab的开发,如何实现tab与页面内容联动呢?关注我就知道!

本次效果展示

 

一、如何实现页面tab

1使用内置组件scroll-view

如下图所示,我们需要使用到红色框框中的属性,此属性可也实现滚动

这里有一个大坑,不管是使用scroll-x还是scroll-y遍历数据都是出现在左边一数列(这里我们只关注scroll-x、scroll-y)

<scroll-view scroll-x="true" class='scroll-view-t' :scroll-into-view="scrollinto">

<view v-for="(item,index) in 20 " :key='index' :id="'tab'+index"

:class="currentIndex==index'active':''" @click="changeTab(index)">

{{item}}

</view>

</scroll-view>

<scroll-view scroll-y="true" :style="'height:'+scrollH+'px'">

<view v-for="(item,index) in 100 " :key='index'>

{{item}}

</view>

</scroll-view>

我们只能通过样式来改变它,让它横过来

scroll-view-t view {

display: inline-block;

font-size: 32rpx !important;

margin: 0 15rpx;

}

scroll-view-t {

white-space: nowrap;

height: 88rpx;

line-height: 88rpx;

}

 

2实现点击时出现的背景样式

这里我们需要定义一个默认的索引currentIndex,在通过点击事件所传出去的索引进行判断,从而获得当前所点击的对象给到样式,样式我们就用三元表达式判断赋予样式,如下点击方法

changeTab(index) { //nabbar栏点击切换

// if (thiscurrentIndex === index) return

thiscurrentIndex = index

// thisscrollinto = 'tab' + index

// if (thiscurrentIndex < 10) {

// thisscrollinto = 'tab0'

// }

},

如下是绑定的点击事件和三元表达式判断赋予样式,其中背景样式提前写好了 

<view v-for="(item,index) in 20 " :key='index' :id="'tab'+index"

:class="currentIndex==index'active':''" @click="changeTab(index)">

{{item}}

</view>

 不过现在只实现了通过点击样式发生改变,感觉实现了tab切换,眼下要解决点击时tab这个导航条也要自己滚动起来,不能一边手动滚动,然后再点击吧

3使用scroll-into-view,实现点击时自动滚动

使用它的目的主要是,在点解tab时可以实现,你向那个方向点,他就往那个方向滚动,不过在点回去的时候,就有坑了,需要对其作出判断 

 阅读文档很难理解对吧,我在这里说说我的理解,这里是想要我们通过在scroll-view中属性scroll-into-view绑定一个元素,此元素还要获得id,此id还不能已数字开头,此id就是移动的关键,需要绑定,所遍历内容的索引,从而实现往哪里滚动,不过想点回去就需要进行判断

如下代码中在scroll-view,使用scroll-into-view绑定了一个自己定义的空元素scrollinto

在v-for遍历后获得了索引,id就通过索引进行了绑定,拼接了以tab开头

<scroll-view scroll-x="true" class='scroll-view-t' :scroll-into-view="scrollinto">

<view v-for="(item,index) in 20 " :key='index' :id="'tab'+index"

:class="currentIndex==index'active':''" @click="changeTab(index)">

{{item}}

</view>

</scroll-view>

实现点击滚动很简单,要滚动回去就要判断了,如下代码,只要当前的thisscrollinto = 'tab' + index就能实现点击就滚动,回去是就要判断当前点击的缩影,手动赋值,给一个最好的区间,这样效果更好

changeTab(index) { //nabbar栏点击切换

if (thiscurrentIndex === index) return

thiscurrentIndex = index

thisscrollinto = 'tab' + index

if (thiscurrentIndex < 10) {

thisscrollinto = 'tab0'

}

},

效果图

wxml页面

<!-- nav导航 -->

<view class="goods">

  <block wx:for="{{tab}}" wx:key="key">

    <view class="{{itemstyle}}" bindtap="tarClick" data-index="{{index}}">{{itemtitcle}}</view>

  </block>

</view>

<!--导航下  视图滑块 -->

<swiper bind:change="changeTab" current="{{index}}">

   <block>

     <swiper-item>

     <text>11111</text>

     </swiper-item>

     <swiper-item>

     <text>2222</text>

     </swiper-item>

     <swiper-item>

     <text>3333</text>

     </swiper-item>

   </block>

</swiper>

js页面

Page({

    data: {

       tab:[

         {titcle:"商品参数",style:"color"}, 

         {titcle:"商品介绍",style:""},

         {titcle:"商品规格",style:""},

        ],

        index:0,

       goods:''

    },

       tarClick(e){

          //  consolelog(ecurrentTargetdatasetindex)

           let tab = thisdatatab;

          let that = this;

          let index = ecurrentTargetdatasetindex

           consolelog(index)

          tabmap((item,key)=>{

           if(key==index)

           {

              tab[key]['style']='color';

           }else{

             tab[key]['style']='';

           }

          })

          thatsetData({tab,index})

       },changeTab(e){

          consolelog(edetailcurrent)

          let tab = thisdatatab;

          let that = this;

          let index = edetailcurrent

           consolelog(index)

          tabmap((item,key)=>{

           if(key==index)

           {

              tab[key]['style']='color';

           }else{

             tab[key]['style']='';

           }

          })

          thatsetData({tab,index})

       },

})

wxss页面

/ pages/details/detailswxss /

goods{

    width: 100%;

    height: 100rpx;

    / background-color:yellowgreen; /

    display:flex;

    justify-content: space-around;

    align-items: center;

}

goods view{

    width: 160rpx;

    height: 100rpx;

    display: flex;

    justify-content: center;

    align-items: center;

}

color{

    color: red;

    border-bottom: 2px solid red;

}

以上就是关于微信小程序 wxml文件中嵌套循环全部的内容,包括:微信小程序 wxml文件中嵌套循环、微信小程序开发——列表渲染 & 条件渲染 & tabBar & 页面跳转、小程序多个标签点击高亮和取值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9431095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存