当前位置:   article > 正文

小程序循环列表点击展开收缩

小程序循环列表点击展开收缩

之前在网上找了很多文章,要么没有循环,要么格式不是我想要的。最后看到了一篇大佬的文章https://blog.csdn.net/haishangfeie/article/details/81040211。大佬的是树结构,和循环列表很相似,只不过查看二级数据的时候会覆盖首级数据,对于想要直观的查看每一级的数据可能不太方便,所以动手吧,就有了下面这种可以无限循环的列表。 

直接放代码吧,代码记得放在components里面

wxml

  1. <view>
  2. <scroll-view style="background:white" class="con">
  3. <view bindtap='tapItem' data-id='{{ model.id }}' data-text='{{ model.name }}' data-nodes="{{model.nodes}}" class="text">{{ model.name }}</view>
  4. <view wx:if='{{ isBranch }}' bindtap='toggle' class="img">
  5. <image src=" {{ open ? '../../images/down.png' : '../../images/right1.png' }}"></image>
  6. </view>
  7. <view wx:else class="imgnone"> </view>
  8. </scroll-view>
  9. <view wx:if='{{ isBranch }}' hidden='{{ !open }}'>
  10. <mytree wx:for='{{ model.nodes }}' wx:key='id' model='{{ item }}'></mytree>
  11. </view>
  12. </view>

js

  1. Component({
  2. properties: {
  3. model: Object,
  4. },
  5. data: {
  6. open: false,
  7. isBranch: false,
  8. },
  9. methods: {
  10. toggle: function (e) {
  11. if (this.data.isBranch) {
  12. this.setData({
  13. open: !this.data.open,
  14. })
  15. }
  16. },
  17. tapItem: function (e) {
  18. var itemid = e.currentTarget.dataset.id;
  19. var text = e.currentTarget.dataset.text;
  20. var nodes = e.currentTarget.dataset.nodes
  21. this.triggerEvent('tapitem', { id: itemid, text: text,nodes:nodes},{ bubbles: true, composed: true });
  22. //console.log('arr', this.properties.model)
  23. },
  24. },
  25. ready: function (e) {
  26. //console.log(this.data);
  27. this.setData({
  28. isBranch: Boolean(this.data.model.nodes && this.data.model.nodes.length),
  29. });
  30. },
  31. })

wxss

  1. /* pages/tree/tree.wxss */
  2. .con image{
  3. width: 25px;
  4. height: 25px;
  5. margin-top: 12px;
  6. }
  7. .con{
  8. width: 100%;
  9. height: 50px;
  10. line-height: 50px;
  11. border-bottom: 1px solid rgb(228, 227, 227);
  12. }
  13. .text{
  14. float: left;
  15. margin-left: 3%;
  16. width: 60%;
  17. }
  18. .img{
  19. text-align: right;
  20. }
  21. .imgnone{
  22. width: 100%;
  23. height: 100%;
  24. background-color: rgb(241, 246, 247);
  25. }

json

  1. {
  2. "component": true,
  3. "usingComponents": {
  4. "mytree": "../tree/tree"
  5. }
  6. }

 用的时候,treeData就是你要放进去的数据。点击文字的时候调用tapItem方法,可以查看点击的数据内容,可以用来赋值或者查询数据。点击向右的图标,展开当前层级下面的子级。当前层级无子级时,向右图标隐藏。

  1. <view wx:for="{{treeData}}" wx:key="index" class="model">
  2. <mytree model='{{item}}' bind:tapitem='tapItem' style="display:{{hid}}">
  3. </mytree>
  4. </view>
  1. tapItem: function (e) {
  2. var str = e.detail
  3. console.log(e)
  4. },

treeData的数据结构是这样的。到此为止,你就可以无限的循环展开列表啦。如果你的数据结构和我的不太一样,记得去wxml和js里面更改一下属性名称。

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/77095
推荐阅读
相关标签
  

闽ICP备14008679号