钉钉小程序tree 递归

有个问题不懂,钉钉小程序创建后,为什么在pages里创建的组件不能使用,反而得创建到node_modules里才能使用,是漏了哪一步?mytree就是加的组件,为什么呢?
在这里插入图片描述

言归正传

这是效果图
在这里插入图片描述

当然,第一步是创建自定义组件,钉钉里讲的就很详细https://developers.dingtalk.com/document/app/development-process

实现如下
html

<view class="a-collapse">
  <view class="a-collapse-title" onTap="selectType" data-itemid='{{ model.id }}' data-itemname='{{ model.name }}'>
    <view class="{{open ? 'a-collapse-title-arrow a-collapse-title-arrow-up' : 'a-collapse-title-arrow'}}" catchTap='toggle'/>
   {{model.name}}
  </view>
  <view style='padding-left: 50rpx;' hidden='{{ !open }}'>
    <mytree a:for='{{ model.children }}' a:key='id' model='{{ item }}'></mytree></view></view>

js重点是 props 接收组件传递来的值,要与传递的key一致,其他方法根据自己需求

data: {
    open: false,     //是否展开
    isBranch: true, //是否有子级
  },
  props: { model: '', }, //接收model
  toggle: function (e) {
      if (this.data.isBranch) {
        this.setData({
          open: !this.data.open,
        })
      }
    },

css是用的支付宝组件Collapse 折叠面板的样式 地址:https://opendocs.alipay.com/mini/component-ext/collapse

那么如何调用tree组件
html

<view>
  <block a:for="{{typelistArr}}">
    <mytree model='{{ item }}'></mytree>  //传递model
  </block>
</view>

其实这些都不重要,重要的是如何利用递归生成我们所需要的数据结构,这才是最难的地方,这个就因接口而异了

参考:

recursionPushChildren(root, data)
  recursionPushChildren(tree, data) {
    for (let i = 0; i < tree.length; i++) {
      let pNode = tree[i];
      let children = this.getChildren(pNode.id, data);
      if (children && children.length > 0) {
        this.recursionPushChildren(children, data);
      }
      pNode.children = children;
    }
  }
getChildren(pId, treeArray) {
    let arr = [];
    if (treeArray) {
      return treeArray.filter((element) => {
        return element.pId == pId;
      })
    }
    return arr;
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值