Vue 树形组件创建 类似于elment tree

标题话不多说 直接上树形组件代码然后慢慢给大家讲解

我的树形数据是这样 的

data:[
{
	check:false,
	name:"首页",
	id:1,
	all_id:1,
	sub:[{
		check:false,
		name:"首页",
		id:2,
		all_id:1-2,
		sub:[{
			check:false,
			name:"首页",
			id:3,
			all_id:1-2-3,
			}...]
		}...]
}...]

创建第一个component----- treeHeader

<template>
    <div class="_tree">
        <div class="_tree_item" v-for="(tree) in defaultTree" :key="tree.id">
            <el-checkbox v-model="tree.check" @change="changeTree(tree)">{{tree.name}}</el-checkbox>//也可以使用input type = checkbox (项目中用的是element就直接拿来用了)
            <tree-contents v-if="tree.sub" @changeTreeCheck="changeTree2" :default-tree-cont="tree.sub"></tree-contents>
        </div>
    </div>
</template>

<script>
    export default {
        components: {
            TreeContents: () => import('./treeContent.vue')
        },
        name: "treeHeader",
        props: {
            defaultTree: {
                type: Array,
                default:()=> []   //默认值
            }
        },
        data() {
            return {}
        },
        created() {
        },
        methods: {
            changeTree(e){
                this.$emit('changeTreeCheck',e.check,e.all_id,e);
            },
            changeTree2(is_check,all_id,change_arr){
                this.$emit('changeTreeCheck',is_check,all_id,change_arr);
            }
        }
    }
</script>

<style scoped>
    ._tree{
        padding-left: 15px;
    }
    ._tree_item{
        margin-right: 30px;
        line-height: 1.8rem;
    }
</style>

创建第一个component----- treeContent

<template>
    <div class="_tree_cont">
        <div v-for="treCont in defaultTreeCont" :key="treCont.id">
            <el-checkbox v-model="treCont.check" @change="changeTree(treCont)">{{treCont.name}}</el-checkbox>//也可以使用input  type = checkbox  (项目中用的是element就直接拿来用了)
            <v-tree-header v-if="treCont.sub" @changeTreeCheck="changeTree1" :default-tree="treCont.sub"></v-tree-header>
        </div>
    </div>
</template>

<script>
    import vTreeHeader from "../components/treeHeader";

    export default {
        components:{
            vTreeHeader
        },
        name: "treeContent",
        props: {
            defaultTreeCont: {
                type: Array,
                default:()=>[]   //默认值
            }
        },
        data() {
            return {}
        },
        created() {
        },
        methods: {
            changeTree(e){
                this.$emit('changeTreeCheck',e.check,e.all_id,e);
            },
            changeTree1(is_check,all_id,change_arr){
                this.$emit('changeTreeCheck',is_check,all_id,change_arr);
            }
        }
    }
</script>

<style scoped>
    ._tree_cont{
        padding-left: 15px;
    }
</style>

以上两个组件用来渲染树形结构,要使用的话还需要在页面上引用。引用方法如下

<template>
   <div class="component_tree">
       <v-tree :default-tree="initTreeData" @changeTreeCheck = "treeChange"></v-tree>
   </div>

</template>
 import vTree from "./treeHeader";
    export default {
        components:{
            vTree
        },
         props: {
            defaultTreeData: {//树的数据
                type: Array,
                default:[]   //默认值
            },
            defaultTreeCheckData:{//已选中的数据
                type:Array,
                default: []
            },
        },
        ....(这里就不写你那么多了 只需要把数据赋值给  initTreeData 就会出现树形组件的dom )
      }

以上内容只是生成组件的dom结构,监听了点击事件,点击事件中能获取到当前点击的元素是否被选中暂时先写这么多
也可以使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值