vue递归组件的使用

管理系统的菜单栏,相信大家都有见过,都免不了有一级二级......等等,层级是不确定的,是后台数据决定的,这时我们就要用到递归组件了。

首先我们来谈谈 组件的name属性:

1. 递归组件的调用;

2keep-alive中使用include和exclude属性,包含或者排除指定name组件。

3. vue-devtools调试;

所以要使用递归组件,必须加上name属性,实现调用自身,使用递归时,我们要非常注意递归结束的条件,否则很容易陷入死循环,抛出错误: max stack size exceeded。

对于递归组件,往往数据会比较复杂,所以我们将递归逻辑抽离出来,作为一个单独的组件。’

首先父组件   menu.vue:


<template>
  <div class="home">
    <tree-menus :list="list"></tree-menus>
  </div>
</template>

<script>
import TreeMenus from '../components/treeMenus.vue';

export default {
  components: {
    TreeMenus,
  },
  data() {
    return {
      list: [
        {
          name: "一级菜单1",
          cList: [
            { name: "二级菜单1-1" },
            {
              name: "二级菜单1-2",
              cList: [
                { name: "三级菜单1-2-1", cList: [{ name: "四级菜单1-2-1-1" }] },
              ],
            },
          ],
        },
        { name: "一级菜单2" },
        {
          name: "一级菜单3",
          cList: [{ name: "二级菜单3-1" }, { name: "二级菜单3-2" }],
        },
      ],
    };
  },
  methods: {},
  mounted() {},
};
</script>

子组件 (递归组件)treeMenus.vue

<template>
  <div class="myTree">
    <ul>
      <li v-for="(item,index) in list" :key="index">
        <p>{{item.name}}</p>
        <div v-if="item.cList">
          <tree-menus :list="item.cList"></tree-menus>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "treeMenus",
  props: {
    list: Array,
  },
};
</script>

然后运行,来看看效果。

 用法比较简单,完结,撒花!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值