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

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日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题