vue对vue-giant-tree进行节点操作
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进行节点操作的更多相关文章
- 034——VUE中表单控件处理之使用vue控制radio表单的实例操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MVC + Vue.js 初体验(实现表单操作)
Vuejs http://cn.vuejs.org/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...
- Vue -- vue-cli(vue脚手架) npm run build打包优化
这段时间公司新项目立项,开发组选用 Vue2.0 进行开发.当然也就一并用到 vue cli 进行自动化构建.结果在基础版本开发完成后,用 npm run build 命令打包上线时,发现以下几个问题 ...
- vue基础——vue介绍
声明式渲染——文本插值: 数据和dom已经进行了关联,所有东西都是响应式的 index.html <div id="app0"> {{message}} </di ...
- vue实践---vue结合 promise 封装原生ajax
有时候不想使用axios这样的外部依赖,想自己封装ajax,这里有两种方法 方法一,在单个页面内使用 封装的代码如下: beforeCreate () { this.$http = (() => ...
- vue系列---Vue组件化的实现原理(八)
_ 阅读目录 一. 什么是Vue组件? 如何注册组件? 1.1 全局注册组件 1.2 局部注册组件 二:组件之间数据如何传递的呢? 1) props 2) $emit 3) 使用$ref实现通信 4) ...
- 得心应用的Vue高级技巧---vue中文社区
1,require.context()一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多 ...
- easyUI 的tree 修改节点,sql递归查询
1.easyUI 的tree 修改节点: 我需要:切换语言状态,英文下, 修改根节点文本,显示英文. 操作位置:在tree的显示 $('#tree').tree(),onLoadSuccess事件方法 ...
- ext 树节点操作
ext 树节点操作 tree :树 node:节点 1.全部展开 tree.expandAll(); 2.全部收缩 tree.collapseAll(); 3.得到父节点 node.parent ...
- Splay Tree的删除操作
Splay Tree的插入操作,搜索操作,和删除操作都实现了,那么就能够使用来解题了. 指针的删除操作的处理还是那么难的,非常多坎须要避开. 同一个坎还是坑了我好多次,就是指针传递的问题,什么时候须要 ...
随机推荐
- 孙勇男:实时视频 SDK 黑盒测试架构丨Dev for Dev 专栏
Dev for Dev 专栏全称为 Developer for Developer,该专栏是声网与 RTC 开发者社区共同发起的开发者互动创新实践活动.透过工程师视角的技术分享.交流碰撞.项目共建等多 ...
- 如何在 Apinto 实现 HTTP 与gRPC 的协议转换 (下)
上文给大家详细介绍了在 Apinto 上实现 HTTP 与 gRPC 的协议转换的基本内容,本篇我们将继续讲解如何在 Apinto-Dashboard 中进行配置. 配置 Apinto Apinto ...
- 程序员必须掌握的java进制转换(全网最详细讲解)
前言 在上一篇文章中,壹哥给大家讲了Java里的各种运算符.其中在讲解位运算符时,我给大家提到了计算机中进制的概念.但是现在很多小白同学,对进制的概念还不够了解,比如二进制.八进制.十六进制都是怎么回 ...
- Spring IOC——源码分析
Spring 容器的 refresh() 创建容器 1 //下面每一个方法都会单独提出来进行分析 2 @Override 3 public void refresh() throws BeansExc ...
- Lua基础语法学习笔记
Lua是一门语言,我们可以使用一个库,可以在运行时去编译执行Lua中的代码,从而实现自己的内存中的数据和逻辑: 准备学习环境: 新建一个Lua项目目录,用来写我们的Lua代码: 进入目录,右键使用vs ...
- dart基础---->函数传值
1. string type main(List<String> args) { String name = "huhx"; changIt(name); print( ...
- R语言包和中文乱码解决方案
常用R语言包 --数据处理:lubridata ,plyr ,reshape2,stringr,formatR,mcmc: --机器学习:nnet,rpart,tree,party,lars,boos ...
- [Maven]Maven聚合工程
一直对此问题好奇,正好有这兴致和时间,有必要了解一下. 所谓聚合项目,实际上就是对项目分模块. 互联网项目一般来说按照业务分(订单模块.VIP模块.支付模块.CMS模块-): 传统的软件项目,大多采用 ...
- [数据库/MySQL]数据库备份与升级:MySQL Percona(RPM) 5.7.24-27 升级到 5.7.31-34
1 数据库升级方式:RPM包方式升级 [亲测有效] 环境 OS: CENTOS 7 DB: MYSQL 5.7.24-27 1.1 数据库备份 备份以防止升级失败 备份数据库的2个主要方法: 1)用M ...
- Android HAL机制的深入理解及在Linux上移植和运行的一个好玩的HAL小例子
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 Ubuntu 18.04.x 前言 近一年来, ...