vue对vue-giant-tree进行节点操作

摘要:
vue项目中使用到了vue-giant-tree这个使用ztree封装的树形插件,在对其节点进行操作时遇到了无法向传统的jquery那样获取到ztreeObj;而导致了无法控制节点dom;浪费了许多时间,so特此记录一哈Vue-Giant-TreeVue-Giant-Tree是最ztree的一个封装;用于vue项目中,该ztree的好处就是不需要自己将数据拼装为树形结构。

vue 项目中使用到了vue-giant-tree这个使用ztree封装的树形插件,在对其节点进行操作时遇到了无法向传统的jquery那样获取到ztreeObj;而导致了无法控制节点dom;浪费了许多时间,so特此记录一哈

Vue-Giant-Tree

Vue-Giant-Tree是最ztree的一个封装;用于vue 项目中,该ztree的好处就是不需要自己将数据拼装为树形结构。只需要给他一个带有子父级关系的数组即可;这就大大减少了拼装数据的麻烦(直接从数据库查询出来就可以使用)

如:


nodes: [
          { id:1, pid:0, name:"随意勾选 1", open:true},
          { id:11, pid:1, name:"随意勾选 1-1", open:true},
          { id:111, pid:11, name:"随意勾选 1-1-1"},
          { id:112, pid:11, name:"随意勾选 1-1-2"},
          { id:12, pid:1, name:"随意勾选 1-2", open:true},
          { id:121, pid:12, name:"随意勾选 1-2-1"},
          { id:122, pid:12, name:"随意勾选 1-2-2"},
          { id:2, pid:0, name:"随意勾选 2", checked:true, open:true},
          { id:21, pid:2, name:"随意勾选 2-1"},
          { id:22, pid:2, name:"随意勾选 2-2", open:true},
          { id:221, pid:22, name:"随意勾选 2-2-1", checked:true},
          { id:222, pid:22, name:"随意勾选 2-2-2"},
          { id:23, pid:2, name:"随意勾选 2-3"}
      ]

一、 项目需求

根据数据类型隐藏节点

根据ztee官网http://www.treejs.cn/v3/api.php提示根据如下hideNode()方法可以隐藏节点
在这里插入图片描述
但在进行封装的vue-giant-tree中不能使用如下方法

var treeObj = $.fn.zTree.getZTreeObj("tree");
var nodes = treeObj.getNodes();
treeObj.hideNode(nodes[0]);

二、使用ref获取dom

于是想到了使用ref


<template>
<tree :nodes="nodes" :setting="setting" @onClick="onClick" @onCheck="onCheck"  ref='ztreeDom'/>
</template>
//js
methods:{
	setNodeVisible(){
		let treeDom = this.$refs.ztreeDom;
		console.log(treeDom);
	}

}

打印如下图

在这里插入图片描述
的确可以根据dom找到ztreeObj;但是根本无法使用treeDom.ztreeObj操作节点


let ztreeObj = treeDom.ztreeObj;
let treeNodes = ztreeObj .getNodes(); 
console.log(treeNodes); // []
ztreeObj.removeNode(treeNodes[0]);

从上的console得知无法获取子节点,那么自然这个操作是失败的了

三、 使用handleCreated方法

最后从作者的 App.vue 中找到了@onCreated="handleCreated" 方法;
于是修改组件绑定


        <tree :nodes="nodes" :setting="setting" @onClick="onClick" @onCheck="onCheck"  @onCreated="handleCreated"/>

使用handleCreated缓存ztreeObj


       methods: {
          handleCreated: function(ztreeObj) {
            this.ztreeObj = ztreeObj;
          },
        }
        

这样就可以对节点进行操作了。

下面是记录使用的完整步骤

四、使用的完整步骤

4.1 package.json引入依赖


  "dependencies": {
    "vue-giant-tree": "^0.1.1"
  },
  

4.2 组件绑定


<template>
    <div class="nav-siderbar">
        <tree :nodes="nodes" :setting="setting" @onClick="onClick" @onCheck="onCheck"  @onCreated="handleCreated"/>
    </div>
</template>
<script>
    import tree from "vue-giant-tree";
    import axios from 'axios';
    export default {
        name: 'map-demo',
        components: {
            tree
        },
        data() {
            return {
              ztreeObj: null,
                setting: {
                    check: {
                        enable: true
                    },
                    data: {
                        simpleData: {
                            enable: true,
                            idKey: "id",
                            pIdKey: "pid",
                            rootPId: "0"
                        }
                    }
                },
                nodes: [],
            }
        },
        methods: {
          handleCreated: function(ztreeObj) {
            this.ztreeObj = ztreeObj;
            // onCreated 中操作ztreeObj对象展开第一个节点
            ztreeObj.expandNode(ztreeObj.getNodes()[0], true);
            let ztreeNodes = ztreeObj.getNodes()[0].children;
            ztreeNodes.find(treeNode => {
              if(treeNode.type == "***"){
                ztreeObj.setChkDisabled(treeNode,true);
              };
            });
            ztreeObj.setChkDisabled(ztreeObj.getNodes()[0],true);
          },
            getTree(val) {
	              axios.post('http://127.0.0.1:8081', {}, {
	                headers: {
	                    'Content-Type': 'application/json'
	                }
	            })
	            .then(response => {
	               this.nodes = response.data;
	            }, err => {
	                console.log(err)
	            })
            },
            // 点击事件
            onClick: function(evt, treeId, treeNode) {
                if(treeNode.type){
                    if(treeNode.type == "***" ){
                        return;
                    };
                }
            },
            // 选中事件
            onCheck: function(evt, treeId, treeNode) {
              // 获取数据treeNode根据checked 是否为true判断是否选中
              if(treeNode.checked){
              
              }else{
              
              }
            },
        }
    }
</script>

4.3 最终效果图

在这里插入图片描述

免责声明:文章转载自《vue对vue-giant-tree进行节点操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Hbuilder快捷键LNMP无法删除或更改权限,显示:rm: cannot remove `.user.ini': Operation not permitted下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一道面试题 vuex缺点?

最近去面试的时候,面试官有一道题是让我阐述用vuex的优缺点,优点倒还好说,这个缺点还真没有认识到,有道友可以帮忙解惑嘛? 2 回答 慕标5265247这种问题一般都有通用回答套路。一件挺好的东西,有什么缺点?1.成本高,即用不起。2.不用用,杀鸡焉用牛刀。3.不好用,某些情况用它解决不了4.不愿意用,有其他替代品。 反对回复2018-09-0...

vue被部署到子(二级)目录

需求有的时候,你的域名很珍贵,除了二级域名外。你还可以将你的项目部署在服务器二级目录下,这样的话,就可以部署多个项目了。比如说,我有一个域名为dshvv.com的服务器,我想部署两个项目:12306项目:http://dshvv.com/12306淘宝项目:http://dshvv.com/taobao问题普通项目不会有问题,但是如果是单页项目,而且单页项...

element ui Cascader 级联选择器 关闭tag时报错 :vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in callback for watcher "value": "TypeError: Cannot read property 'level' of null"

情况说明:多选后,点击关闭tag的按钮,会出现如下报错。   经过使用官网列子,及数据。发现删除tag并不会出现这个错误。经过对比,唯一不同的是官网的value 是字符串对象,而我使用的id是数字。将id改成字符串格式后,问题就解决了。 ☀ ░ 标记一下░  ☀...

在vue项目中使用axios发送FormData

这个是axios的中文文档,挺详细的: https://www.kancloud.cn/luponu/axios/873153 文档中的 使用 application/x-www-form-urlencoded format 这一部分讲的就是 通过axios发送FromData的方法, 下面是我在vue项目中使用的示例: 在本组件的method添加了一个点...

vue中handsontable 使用

handsontable是目前在前端界最接近excel的插件,可以执行编辑,复制粘贴,插入删除行列,排序等复杂操作 1.安装模块包 npm install handsontable-pro @handsontable-pro/vue npm install handsontable @handsontable/vue 这样安装完handsontable依...

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)

一、 Vue项目打包发布apache报错: route,配置一个覆盖所有的路由情况 1、需要修改router/index.js中new Router 配置,加一个base: '/htcm_front/', 它指定应用的基路径,该应用是服务于localhost/htcm_front路径下,所以必须加base配置,否则应用会展示404页面 2、需要修改conf...