大型项目技术栈第三讲 ztree的使用

ztree的使用

一、ztree简介

1.什么是zTree

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

2.zTree优点

采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀

兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器

支持 JSON 数据

支持静态 和 Ajax 异步加载节点数据

支持任意更换皮肤 / 自定义图标(依靠css)

支持极其灵活的 checkbox 或 radio 选择功能

提供多种事件响应回调

灵活的编辑(增/删/改/查)功能,可随意拖拽节点,还可以多节点拖拽哟

在一个页面内可同时生成多个 Tree 实例

简单的参数配置实现 灵活多变的功能

二、ztree使用

1.入门实例

1.1下载ztree资源链接

1.2解压资源并导入到项目

大型项目技术栈第三讲  ztree的使用

将js、metro.css和metro.css对应的img文件夹复制到项目,注意保持css和img结构对应关系

1.3 示例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js"></script>
		<!-- ztree提供三种风格css,需要与img文件夹对应上 -->
		<link href="static/ztree/metro.css"   rel="stylesheet"/>
<!-- 依赖jquery  必须导入 -->
		<script src="js/jquery-2.1.1.min.js"></script>
<!-- all.js = core + excheck + exedit ( 不包括 exhide ); -->
		<script src="static/ztree/jquery.ztree.all-3.5.js"></script>	
		
	</head>
	<body>
	
		<div id="treeDiv" style="height: 100px;">
           <input  style="width: 100px;" @focus="showTree(true)"  v-model="name" />
			   
	<!--ul用于生成菜单树 注意默认class为ztree   -->	   
           <ul id="treeDemo"  class="ztree" v-show="isShow" >
					
			</ul>
           
        </div>

	</body>
	<script>
		new Vue({
			el:'#treeDiv',
			data: {
				
				isShow:false,
					name:'',	
                    //zTree 的参数配置
					setting:{	

						data: {
							key: {
								title:"t"
							},
							simpleData: {
								enable: true//简单数据模式,传入数组自动转成树结构显示,必须有id、pId对应关系
							}
						}

					},
					
					 zTree 的数据  
					zNodes:[
			{ id:1, pId:0, name:"节点搜索演示 1", t:"id=1", open:true},
			{ id:11, pId:1, name:"关键字可以是名字", t:"id=11"},
			{ id:12, pId:1, name:"关键字可以是level", t:"id=12"},
			{ id:13, pId:1, name:"关键字可以是id", t:"id=13"},
			{ id:14, pId:1, name:"关键字可以是各种属性", t:"id=14"},
			{ id:2, pId:0, name:"节点搜索演示 2", t:"id=2", open:true},
			{ id:21, pId:2, name:"可以只搜索一个节点", t:"id=21"},
			{ id:22, pId:2, name:"可以搜索节点集合", t:"id=22"},
			{ id:23, pId:2, name:"搜我吧", t:"id=23"},
			{ id:3, pId:0, name:"节点搜索演示 3", t:"id=3", open:true },
			{ id:31, pId:3, name:"我的 id 是: 31", t:"id=31"},
			{ id:32, pId:31, name:"我的 id 是: 32", t:"id=32"},
			{ id:33, pId:32, name:"我的 id 是: 33", t:"id=33"}
		],
					treeObj:''
				
			},
			methods:{
				initTree:function(){
				//根据选择器选中生成树的元素节点,传入设置和节点数据 生成ztree
					this.treeObj = $.fn.zTree.init($('#treeDemo'),this.setting,this.zNodes);
					console.log(this.treeObj);
				},showTree:function(flag){
					this.isShow=true;
				},

			
			
			},
			mounted:function(){//在节点创建后初始化ztree
				this.initTree();
		})
	</script>
	
</html>

大型项目技术栈第三讲  ztree的使用

2.callback节点事件回调

ztree的setting属性,callback用于处理节点上的事件回调

案例:点击元素打印出选中元素id及元素节点数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js"></script>
		<!-- ztree提供三种风格css,需要与img文件夹对应上 -->
		<link href="static/ztree/metro.css"   rel="stylesheet"/>
<!-- 依赖jquery  必须导入 -->
		<script src="js/jquery-2.1.1.min.js"></script>
<!-- all.js = core + excheck + exedit ( 不包括 exhide ); -->
		<script src="static/ztree/jquery.ztree.all-3.5.js"></script>	
		
	</head>
	<body>
	
		<div id="treeDiv" style="height: 100px;">
           <input  style="width: 100px;" @focus="showTree(true)"  v-model="name" />
			   
	<!--ul用于生成菜单树 注意默认class为ztree   -->	   
           <ul id="treeDemo"  class="ztree" v-show="isShow" >
					
			</ul>
           
        </div>

	</body>
	<script>
		new Vue({
			el:'#treeDiv',
			//vue的data中,如果通过对象格式或者是箭头函数来声明绑定属性,在绑定属性中都不能使用this
			//解决方案:声明函数方式,通过return返回绑定属性
			data: function(){
				return {
				isShow:false,
					name:'',			
					setting:{	
						data: {
							key: {
								title:"t"
							},
							simpleData: {
								enable: true
							}
						},
						//beforeClick在点击事件执行前触发
						//onClick在点击事件执行时触发
						callback: {
							beforeClick: this.beforeClick,
							onClick: this.onClick
						}
					},
					zNodes:[
			{ id:1, pId:0, name:"节点搜索演示 1", t:"id=1", open:true},
			{ id:11, pId:1, name:"关键字可以是名字", t:"id=11"},
			{ id:12, pId:1, name:"关键字可以是level", t:"id=12"},
			{ id:13, pId:1, name:"关键字可以是id", t:"id=13"},
			{ id:14, pId:1, name:"关键字可以是各种属性", t:"id=14"},
			{ id:2, pId:0, name:"节点搜索演示 2", t:"id=2", open:true},
			{ id:21, pId:2, name:"可以只搜索一个节点", t:"id=21"},
			{ id:22, pId:2, name:"可以搜索节点集合", t:"id=22"},
			{ id:23, pId:2, name:"搜我吧", t:"id=23"},
			{ id:3, pId:0, name:"节点搜索演示 3", t:"id=3", open:true },
			{ id:31, pId:3, name:"我的 id 是: 31", t:"id=31"},
			{ id:32, pId:31, name:"我的 id 是: 32", t:"id=32"},
			{ id:33, pId:32, name:"我的 id 是: 33", t:"id=33"}
		],
					treeObj:''
				}
			},
			methods:{
				initTree:function(){
					this.treeObj = $.fn.zTree.init($('#treeDemo'),this.setting,this.zNodes);
					console.log(this.treeObj);
				},
				showTree:function(flag){
					this.isShow=true;
				},
				onClick:function(event,treeId,treeNode){
					console.log(treeId);
					console.log(treeNode);
				},
				beforeClick:function(treeId, treeNode, clickFlag) {
					console.log(treeId)
				}
			
				
				
			},
			mounted:function(){
				this.initTree();
		})
	</script>
	
</html>

大型项目技术栈第三讲  ztree的使用

3.综合案例

点击输入框,显示菜单树,并且输入内容按回车后,实现模糊搜索查出节点名字,用红色字体显示这些节点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js"></script>
		<!-- ztree提供三种风格css,需要与img文件夹对应上 -->
		<link href="static/ztree/metro.css"   rel="stylesheet"/>
<!-- 依赖jquery  必须导入 -->
		<script src="js/jquery-2.1.1.min.js"></script>
<!-- all.js = core + excheck + exedit ( 不包括 exhide ); -->
		<script src="static/ztree/jquery.ztree.all-3.5.js"></script>	
		
	</head>
	<body>
	
		<div id="treeDiv" style="height: 100px;">
           <input  style="width: 100px;" @focus="showTree(true)" @keydown.enter="search" v-model="name" />
			   
	<!--ul用于生成菜单树 注意默认class为ztree   -->	   
           <ul id="treeDemo"  class="ztree" v-show="isShow" >
					
			</ul>
           
        </div>

	</body>
	<script>
		new Vue({
			el:'#treeDiv',
			data: function(){
				return {
				isShow:false,
					name:'',			
					setting:{	
						data: {
							key: {
								title:"t"
							},
							simpleData: {
								enable: true
							}
						},
						callback: {
							beforeClick: this.beforeClick,
							onClick: this.onClick
						},
						view: {
							fontCss: this.setFontCss
						}

					},
					zNodes:[
			{ id:1, pId:0, name:"节点搜索演示 1", t:"id=1", open:true},
			{ id:11, pId:1, name:"关键字可以是名字", t:"id=11"},
			{ id:12, pId:1, name:"关键字可以是level", t:"id=12"},
			{ id:13, pId:1, name:"关键字可以是id", t:"id=13"},
			{ id:14, pId:1, name:"关键字可以是各种属性", t:"id=14"},
			{ id:2, pId:0, name:"节点搜索演示 2", t:"id=2", open:true},
			{ id:21, pId:2, name:"可以只搜索一个节点", t:"id=21"},
			{ id:22, pId:2, name:"可以搜索节点集合", t:"id=22"},
			{ id:23, pId:2, name:"搜我吧", t:"id=23"},
			{ id:3, pId:0, name:"节点搜索演示 3", t:"id=3", open:true },
			{ id:31, pId:3, name:"我的 id 是: 31", t:"id=31"},
			{ id:32, pId:31, name:"我的 id 是: 32", t:"id=32"},
			{ id:33, pId:32, name:"我的 id 是: 33", t:"id=33"}
		],
					treeObj:''
				}
			},
			methods:{
				initTree:function(){
					this.treeObj = $.fn.zTree.init($('#treeDemo'),this.setting,this.zNodes);
					console.log(this.treeObj);
				},
				showTree:function(flag){
					this.isShow=true;
				},
				onClick:function(event,treeId,treeNode){
					console.log(treeId);
					console.log(treeNode);
				},
				beforeClick:function(treeId, treeNode, clickFlag) {
					console.log(treeId)
				},
				search:function(){
					let nodes = this.treeObj.getNodesByParamFuzzy("name",this.name,null);
					// console.log(this.treeObj.getNodes());
					var treeNodes = this.treeObj.transformToArray(this.treeObj.getNodes());
					console.log(treeNodes);
					for (let i = 0; i < treeNodes.length; i++) {
						treeNodes[i].highlight = false;
						this.treeObj.updateNode(treeNodes[i]);
					}
					console.log(nodes);
					for( var i=0, l=nodes.length; i<l; i++) {
						nodes[i].highlight = true;
						this.treeObj.updateNode(nodes[i]);
					}
				},
				setFontCss:function(treeId, treeNode){
					return treeNode.highlight ? {color:"#A60000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"};
				}

			},
			mounted:function(){
				this.initTree();
				
				
			}
		})
	</script>
	
</html>

上一篇:ztree实现异步加载(点击节点,请求后台数据,添加数据到对应节点)


下一篇:ztree中更新节点信息