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

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 电脑锁屏时vba运行SAP,excel数据不能复制到SAP
    • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
    • ¥30 各位help写一下代码
    • ¥15 在运行SDEdit模型下载不了
    • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
    • ¥15 电脑连上WIFI却用不了
    • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
    • ¥15 hyper-v出现的问题
    • ¥15 有能用的可加酬金,求可以批量下载懒人听书的软件,能登录自己帐号的。
    • ¥100 高博一起做RGB-D SLAM(5)VO无法出visualisation问题