满口金牙 2022-05-31 13:12 采纳率: 91.1%
浏览 194
已结题

Vue3 组件递归,怎么获取 是哪一层

一个目录树的组件:

一、父组件中 循环 TreeItme 组件

父组件中:
 <TreeItme v-for="item in menuCustomData" :key='item.key' :item="item" />

二、TreeItme 组件中 递归 循环自身

TreeItme组件中:
<template>
    // 其它代码略
    <TreeItem style="position: relative; left:67px;" v-if="itemVisible" v-for='(v,i) in item.children' :key='i' :item='v'/>
</template>

三、现在需要在TreeItme组件 获取 当前递归 是 哪一层(第几次递归),怎么获取??

  • 写回答

1条回答 默认 最新

  • v逆水行舟v 2022-05-31 14:15
    关注

    输出结果:

    img

    父组件:

    <template>
      <tree-item v-for="item in menuCustomData" :key="item.key" :item="item"></tree-item>
    </template>
    <script lang="ts">
    import { defineComponent } from 'vue';
    import TreeItem from './tree-item.vue';
    
    export default defineComponent({
        name: 'ButtonExample',
        components: {
            TreeItem,
        },
        setup() {
            const menuCustomData = [
                {
                    key: '1',
                    title: 'menu-1',
                    children: [
                        {
                            key: '1-1',
                            title: 'menu-1-1',
                            children: [
                                {
                                    key: '1-1-1',
                                    title: 'menu-1-1-1',
                                },
                            ],
                        },
                        {
                            key: '1-2',
                            title: 'menu-1-2',
                        },
                    ],
                },
                {
                    key: '2',
                    title: 'menu-2',
                },
            ];
            return {
                menuCustomData,
            };
        },
    });
    </script>
    

    子组件:

    
    <template>
        <h1>{{ item.title }} ---- {{ level }}</h1>
        <template v-if="item && item.children">
            <tree-item
                v-for="v in item.children"
                :key="v.key"
                :level="innerLevel"
                :item="v"
            ></tree-item>
        </template>
    </template>
    
    <script lang="ts">
    import { defineComponent, ref } from 'vue';
    import type { PropType } from 'vue';
    
    interface Item {
        key: string;
        title: string;
        children?: Item[];
    }
    
    export default defineComponent({
        name: 'TreeItem',
        props: {
            item: {
                type: Object as PropType<Item>,
                default: () => {},
            },
            level: {
                type: Number,
                default: 0,
            },
        },
        setup(props) {
            const innerLevel = ref<number>(1);
    
            if (props.item.children && props.item.children.length > 0) {
                innerLevel.value = props.level + 1;
            }
    
            return {
                innerLevel,
            };
        },
    });
    </script>
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日
  • 修改了问题 5月31日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 加氢站氢负荷数据集来源
  • ¥15 umi接入sentry遇到问题
  • ¥15 HBuilderX打包H5网页,扫码模块无法使用
  • ¥15 Javascript跳转页面后,无法执行后面代码,如何解决?
  • ¥15 echarts绘制图表
  • ¥15 请教两个关于高德地图定位不准的技术问题
  • ¥15 根据企业名称 对照两个文件 样本筛选/匹配
  • ¥15 Linux环境下CA证书更新问题
  • ¥15 sqlserver语句提取结果以外数据
  • ¥60 微信小程序如何上传QQ聊天文件