欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > vue3使用递归组件渲染层级结构

vue3使用递归组件渲染层级结构

2024/10/23 23:34:13 来源:https://blog.csdn.net/weixin_42234899/article/details/140680734  浏览:    关键词:vue3使用递归组件渲染层级结构

先看看是不是你想要的:

当有层级去渲染的时候,嵌套的层级不明确,这时只能通过递归组件去渲染。

数据如下:

通过判断subCatalog这个字段的长度是否大于0来确定是否有下级。

上代码:(代码是使用uniapp开发的,view标签可进行更换)

父组件
<template><view><my-treev-for="(item, index) in list":key="index":item="item":open="openFirst[index]"@toggleOpen="toggleOpenFirst(index)"/></view>
</template><script setup>
import myTree from './components/myTree.vue';
import { ref, watch } from 'vue';const props = defineProps({list: { // 展示的层级数据type: Array,default: []}
})const openFirst = ref([]); // 控制第一级的展开状态watch(() => props.list, (val) => {if (val.length > 0) {openFirst.value = new Array(val.length).fill(false);}
})const toggleOpenFirst = (index) => {openFirst.value[index] = !openFirst.value[index]; // 切换第一级的展开状态
};
子组件:
<template><view class="link"><view class="linkbg"><view class="links">
// 1、item是父组件传递过来的数据<view class="links-title" @click="goList(item)">{{ item.name }}</view><uv-icon :class="isOpen ? 'arrow-down' : 'arrow-right'" name="arrow-down" v-if="item.subCatalog.length" @click="toggleOpen(item)"></uv-icon></view><Transition><view v-if="isOpen"><view v-for="(subItem, index) in item.subCatalog" :key="subItem.id">
// 调用自身,1处的item便是subItem了<my-tree:item="subItem":open="openTwo[index]"@toggleOpen="toggleSubOpen(index)"/></view></view></Transition></view></view>
</template><script setup>
import { ref } from 'vue';const props = defineProps({item: {type: Object,required: true,},open: {type: Boolean,default: false,},
});const emit = defineEmits(['toggleOpen']);const isOpen = ref(props.open); // 根据 props.open 初始化
const openTwo = ref(new Array(props.item.subCatalog.length).fill(false)); // 初始化子项的展开状态const goList = (val) => {
}const toggleOpen = (val) => {isOpen.value = !isOpen.value; // 切换当前项的展开状态emit('toggleOpen', props.item); // 触发事件
};const toggleSubOpen = (index) => {openTwo.value[index] = !openTwo.value[index]; // 切换子项的展开状态
};</script>

递归组件的思想,便是和使用递归方法一样,自身去调用自身,以达到遍历每一项的数据。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com