小程序自定义组件嵌套

小程序有一个需求:实现树形菜单,因为数据是动态的,所以页面没办法写死,想到了无限嵌套

组件的嵌套其实就是让自定义组件引用自身,然后页面直接使用该组件就可以

自定义组件的使用:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/

 

1.自定义组件(树形菜单)

<view style='margin-left:{{depth*20}}px' wx:if="{{treedata.length>0}}" wx:for="{{treedata}}">
  <view data-id="{{item.id}}">{{item.name}}</view>
  <view wx:if="{{item.childs!=undefined&&item.childs!=null&&item.childs.length>0}}">
    <servant treedata="{{item.childs}}" depth="{{depth+1}}"></servant>
  </view>
</view>

组件实现自引用必须在自定义组件的json文件中添加 usingComponents

{
  "component": true,    //声明组件
  "usingComponents": {        //可以使用的组件
    "servant":"/components/master/master"
  }
}

同时组件的js文件中需要定义属性,其他页面使用该组件时数据通过这个属性传递

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    treedata: {
      type: Array,
      value: []
    },
    depth: {
      type: Number,
      value: 0
    }
  },

  /**
   * 组件的初始数据
   */
  data: {

  },

  /**
   * 组件的方法列表
   */
  methods: {

  }
})

2. 组件定义完成后,页面使用

页面json文件需要声明

{
  "usingComponents": {
    "servant": "/components/master/master"    //组件路径
  }
}
<!-- 数据是在页面的js中定义的,通过组件的属性 treedata 来传递 -->

<servant treedata="{{treedata}}" depth="0"></servant>

示例数据,数据在使用组件的js中

Page({
    data:{
        treedata: [
        {
          id:1,
          name:"第一层1",
          childs:[
            {
              id: 2,
              name: "第二层11",
              childs: [
                {
                  id: 4,
                  name: "第三层11",
                  childs: [
                    {
                      id: 5,
                      name: "第四层11",
                      childs: [

                      ]
                    },
                    {
                      id: 6,
                      name: "第四层12"
                    }
                  ]
                },
                {
                  id: 7,
                  name: "第三层12"
                }
              ]
            },
            {
              id: 3,
              name: "第二层12"
            }
          ]
        },
        {
          id: 2,
          name: "第一层2",
          childs: [
            {
              id: 8,
              name: "第二层21",
              childs: [
                {
                  id: 9,
                  name: "第三层21",
                  childs: [
                    {
                      id: 10,
                      name: "第四层21",
                      childs: [
                        {
                            id:14,
                            name:"第五层"
                        }
                      ]
                    }
                  ]
                },
                {
                  id: 12,
                  name: "第三层22"
                }
              ]
            },
            {
              id: 13,
              name: "第二层22"
            }
          ]
        }
    ]
    }
})

效果图(有点丑,哈哈哈)

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值