vue手写树形结构

11 篇文章 0 订阅
今天项目中有一个三级树形功能,写完自己有想写一个根据数据自动生成的树形结构。
主要的思路:就是树形结构是一个重复的循环的,因此需要遍历自己的组件。只是生成一级的数据,而下面的数据没有生成并且报错了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020031917031867.png)
组件需要一个name属性。
添加一个手风琴的效果
因此最终的代码如下:
<template>
    <div id="children_tree">
        <div v-for="(item, index) in parentTreeData" :key="index">
            <div class="title" @click="showHidden(item, index)">{{item.title}}</div>
            <children v-if="item.children" :parent-tree-data="item.children"></children>
        </div>
    </div>
</template>

<script>
export default {
    name: "children",
    props: {
        parentTreeData: {
            type: Array,
            default: () => {
                return []
            }
        },
    },
    methods: {
    	// 展开或者隐藏下级目录
        showHidden(item, index) {
            this.parentTreeData.forEach(value => {
                // parentTreeData[i]的show属性不等于当前数据的isShow属性那么menuList[i]等于false
                if (value.isShow !== this.parentTreeData[index].isShow) {
                    value.isShow = false;
                }
            });
            item.isShow = !item.isShow;
        }
    }
}
</script>

下面是我模拟的数据结构:

 treeList: [
                {
                    id: 1,
                    title: "第一级",
                    children: [
                        {
                            id: 1.2,
                            title: "第二级",
                            // children: [
                            //     {
                            //         id: 1.3,
                            //         title: "第三级"
                            //     }
                            // ]
                        }
                    ]
                },
                {
                    id: 2,
                    title: "第一级",
                    children: [
                        {
                            id: 2.2,
                            title: "第二级",
                            children: [
                                {
                                    id: 2.3,
                                    title: "第三级"
                                }
                            ]
                        }
                    ]
                },
                {
                    id: 3,
                    title: "第一级",
                    children: [
                        {
                            id: 3.2,
                            title: "第二级",
                            children: [
                                {
                                    id: 3.3,
                                    title: "第三级"
                                }
                            ]
                        }
                    ]
                }
            ]

这里只是简单完成递归的逻辑,后面等有时间再把样式添加上去

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要给Vue中的树形结构添加属性,可以使用Vue的自定义指令或计算属性来实现。 1. 使用自定义指令: 在Vue的指令中,可以通过`bind`和`update`钩子函数来操作DOM元素,并为其添加属性。下面是一个给树形结构添加属性的自定义指令示例: ```javascript Vue.directive('tree-attribute', { bind: function (el, binding) { // 获取传入的属性值 const attributeValue = binding.value; // 设置树节点的属性 el.setAttribute('data-tree-attribute', attributeValue); }, update: function (el, binding) { // 更新属性值 const newAttributeValue = binding.value; el.setAttribute('data-tree-attribute', newAttributeValue); } }); ``` 在Vue模板中,使用自定义指令来给树节点添加属性: ```html <div v-tree-attribute="yourAttribute"></div> ``` 2. 使用计算属性: 如果树形结构的数据是响应式的,你可以使用计算属性来为节点添加属性。在计算属性中,根据节点的数据来动态生成属性值,并在模板中使用。 ```javascript Vue.component('tree-node', { props: ['node'], computed: { nodeAttribute: function () { // 根据节点的数据生成属性值 const attributeValue = this.node.attribute; return attributeValue; } }, template: ` <div :data-tree-attribute="nodeAttribute"> <!-- 树节点内容 --> </div> ` }); ``` 在父组件中使用树节点组件,并传入节点数据: ```html <tree-node :node="yourNodeData"></tree-node> ``` 这样,在渲染时,计算属性会根据节点数据动态生成属性值,并将其应用到树节点的属性中。 这些方法可以根据你的具体需求来添加属性到树形结构中的节点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值