1 前提准备
1.1 新建一个angular4项目
参考:https://www.freexyz.cn/article/119668.htm
1.2 去zTree官网下载zTree
zTree官网:点击前往
三少使用的版本:点击前往
1.3 参考博客
https://www.freexyz.cn/article/133284.htm
2 编程步骤
从打印出zTree对象可以看出,zTree对象利用init方法来实现zTree结构;init方法接收三个参数
参数1:一个ul标签的DOM节点对象
参数2:基本配置对象
参数3:标题信息数组
2.1 在index.html中引入相关js、css
<!doctype html> <html lang=\"en\"> <head> <meta charset=\"utf-8\"> <title>TestZtree</title> <base href=\"/\" rel=\"external nofollow\" > <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\" rel=\"external nofollow\" > <link rel=\"stylesheet\" type=\"text/css\" href=\"./assets/zTree/css/zTreeStyle/zTreeStyle.css\" rel=\"external nofollow\" > <link rel=\"stylesheet\" type=\"text/css\" href=\"./assets/zTree/css/demo.css\" rel=\"external nofollow\" > <script src=\"./assets/zTree/js/jquery-1.4.4.min.js\"></script> <script src=\"./assets/zTree/js/jquery.ztree.core.js\"></script> </head> <body> <app-root></app-root> </body> </html>
View Code
2.2 在TS文件中声明jquery对象
declare var $ : any;
2.3 在TS文件中编写代码
import { Component, OnInit } from \'@angular/core\'; declare var $ : any; @Component({ selector: \'app-root\', templateUrl: \'./app.component.html\', styleUrls: [\'./app.component.scss\'] }) export class AppComponent implements OnInit { // setting = { // view: { // showLine: true, // showIcon: true, // fontCss: this.getFont // }, // data: { // simpleData: { // enable: true, // idKey: \'id\', // pIdKey: \'pId\' // } // }, // callback: { // onClick: this.onCzTreeOnClick // } // }; // zNodes = [ // {id: 1, pId: 0, name: \'1 一级标题\', open: true, iconOpen:\"assets/zTree/css/zTreeStyle/img/diy/1_open.png\", iconClose:\"assets/zTree/css/zTreeStyle/img/diy/1_close.png\"}, // {id: 11, pId: 1, name: \'1.1 二级标题\', open: true, font:{\'background-color\':\'skyblue\', \'color\':\'white\'}}, // {id: 111, pId: 11, name: \'1.1.1 三级标题 -> 博客园\', url: \'http://www.cnblogs.com/NeverCtrl-C/\'}, // {id: 112, pId: 11, name: \'1.1.2 三级标题 -> 单击\', click: \"alert(\'你单击了\')\"}, // {id: 12, pId: 1, name: \'1.2 二级标题\'}, // {id: 2, pId: 0, name: \'2 一级标题\'} // ] // getFont(treeId, node) { // return node.font ? node.font : {}; // } // onCzTreeOnClick(event, treeId, treeNode, clickFlag) { // alert(treeNode.name); // } setting = { data: { simpleData: { enable: true } } }; zNodes = [ {id: 1, pId: 0, name: \'1 一级标题\'}, {id: 11, pId: 1, name: \'1.1 二级标题\'}, {id: 111, pId: 11, name: \'1.1.1 三级标题\'}, {id: 112, pId: 11, name: \'1.1.2 三级标题\'}, {id: 12, pId: 1, name: \'1.2 二级标题\'}, {id: 2, pId: 0, name: \'2 一级标题\'} ]; constructor() { } ngOnInit() { console.log($); console.log($.fn.zTree); $.fn.zTree.init($(\"#ztree\"),this.setting,this.zNodes); } }
View Code
2.4 在组件HTML中编写代码
<ul class=\"ztree\"><ul></ul>
2.5 效果展示
3 zTree基本功能
3.1 不显示连接线
3.1.1 官方文档
不显示标题之间的连接线
3.1.2 编程步骤
在基本配置对象中指定showLine属性的值为false即可
setting = { data: { simpleData: { enable: true } }, view: { showLine: false } };
3.2 不显示节点图标
3.2.1 官方文档
去掉节点前面的图标
3.2.2 编程步骤
将基本配置对象的showIcon属性设为false即可
setting = { data: { simpleData: { enable: true } }, view: { showLine: false, showIcon: false } };
View Code
3.3 自定义节点图标
3.3.1 官方文档
更改节点的图标
3.3.2 编程步骤
为treeNode节点数据设置icon/iconOpen/iconClose属性即可
3.4 自定义字体
3.4.1 官方文档
更改节点字体的样式
3.4.2 编程步骤
为treeNode节点数据设置font属性即可,font属性的值是一个对象,该对象的内容和style的数据一样
3.4.3 效果展示
3.5 超链接
3.5.1 官方文档
点击节点标题就会自动跳转到对应的url
注意01:click属性只能进行最简单的 click 事件操作。相当于 的内容。 如果操作较复杂,请使用 onClick 事件回调函数。
3.5.2 编程步骤
为treeNode节点数据设置url、click属性即可
技巧01:设置click属性时,属性值必须是一些简单的onClick事件
技巧02:设置target属性时,属性值有 _blank 和 _self
_blank -> 用一个新窗口打开
_self -> 在原来的窗口打开
zNodes = [ {id: 1, pId: 0, name: \'1 一级标题\', open: true, iconOpen:\"assets/zTree/css/zTreeStyle/img/diy/1_open.png\", iconClose:\"assets/zTree/css/zTreeStyle/img/diy/1_close.png\"}, {id: 11, pId: 1, name: \'1.1 二级标题\', open: true, font:{\'background-color\':\'skyblue\', \'color\':\'white\'}}, {id: 111, pId: 11, name: \'1.1.1 三级标题 -> 博客园1\', url: \'http://www.cnblogs.com/NeverCtrl-C/\', target: \'_blank\'}, {id: 113, pId: 11, name: \'1.1.1 三级标题 -> 博客园2\', url: \'http://www.cnblogs.com/NeverCtrl-C/\', target: \'_self\'}, {id: 112, pId: 11, name: \'1.1.2 三级标题 -> 单击\', click: \"alert(\'你单击了\')\"}, {id: 12, pId: 1, name: \'1.2 二级标题\'}, {id: 2, pId: 0, name: \'2 一级标题\'} ]
View Code
3.6 单击控制
3.6.1 官方文档
点击节点标题时触发相应的方法
技巧01:在angular中可以利用这个用法来实现路由跳转
3.6.2 编程步骤
设置基本配置对象的onClick属性
技巧01:onClick属性值是一个方法的引用,我们需要自己编写这个方法
setting = { view: { showLine: true, showIcon: true, fontCss: this.getFont }, data: { simpleData: { enable: true, idKey: \'id\', pIdKey: \'pId\' } }, callback: { onClick: this.onCzTreeOnClick } };
View Code
编写onClick触发方法
onCzTreeOnClick(event, treeId, treeNode, clickFlag) { alert(treeNode.name); }
View Code
3.6.3 代码汇总
import { Component, OnInit } from \'@angular/core\'; declare var $ : any; @Component({ selector: \'app-root\', templateUrl: \'./app.component.html\', styleUrls: [\'./app.component.scss\'] }) export class AppComponent implements OnInit { setting = { view: { showLine: true, showIcon: true, fontCss: this.getFont }, data: { simpleData: { enable: true, idKey: \'id\', pIdKey: \'pId\' } }, callback: { onClick: this.onCzTreeOnClick }, // async: { // enable: true, // url:\"http://localhost:3000/data\", // type: \"get\", // // autoParam:[\"id\", \"name=n\", \"level=lv\"], // // otherParam:{\"otherParam\":\"zTreeAsyncTest\"}, // dataFilter: this.filter // } }; zNodes = [ {id: 1, pId: 0, name: \'1 一级标题\', open: true, iconOpen:\"assets/zTree/css/zTreeStyle/img/diy/1_open.png\", iconClose:\"assets/zTree/css/zTreeStyle/img/diy/1_close.png\"}, {id: 11, pId: 1, name: \'1.1 二级标题\', open: true, font:{\'background-color\':\'skyblue\', \'color\':\'white\'}}, {id: 111, pId: 11, name: \'1.1.1 三级标题 -> 博客园1\', url: \'http://www.cnblogs.com/NeverCtrl-C/\', target: \'_blank\'}, {id: 113, pId: 11, name: \'1.1.1 三级标题 -> 博客园2\', url: \'http://www.cnblogs.com/NeverCtrl-C/\', target: \'_self\'}, {id: 112, pId: 11, name: \'1.1.2 三级标题 -> 单击\', click: \"alert(\'你单击了\')\"}, {id: 12, pId: 1, name: \'1.2 二级标题\'}, {id: 2, pId: 0, name: \'2 一级标题\'} ] getFont(treeId, node) { return node.font ? node.font : {}; } // filter(treeId, parentNode,responseData) { // console.log(responseData); // if (responseData) { // for(var i =0; i < responseData.length; i++) { // responseData[i].name += \"动态节点数据\" + responseData[i].id; // } // } // return responseData; // } onCzTreeOnClick(event, treeId, treeNode, clickFlag) { alert(treeNode.name); } constructor() { } ngOnInit() { console.log(\'打印输出jquery对象\'); console.log($); console.log(\'但因输出zTree对象\'); console.log($.fn.zTree); $.fn.zTree.init($(\"#ztree\"),this.setting,this.zNodes); // $.fn.zTree.init($(\"#ztree\"),this.setting); } }
View Code
3.7 异步加载节点数据
3.7.1 官方文档
节点的数据是从后台进行获取的
3.7.2 编程步骤
技巧01:异步加载节点数据时init方法不用传递第三个参数
> 准备一个后台用于返回JSON格式的数据
技巧01:返回的JSON数据是一个列表,格式为
[ { \"id\": 1, \"pId\": 0, \"name\": \"1 one\" }, { \"id\": 2, \"pId\": 0, \"name\": \"2 two\" } ]
技巧02:三少偷懒,是利用json-server模拟的后台数据,哈哈;json-server
> 设置基本配置对象的async属性
setting = { view: { showLine: true, showIcon: true, fontCss: this.getFont }, data: { simpleData: { enable: true, idKey: \'id\', pIdKey: \'pId\' } }, callback: { onClick: this.onCzTreeOnClick }, async: { enable: true, url:\"http://localhost:3000/data\", type: \"get\", // autoParam:[\"id\", \"name=n\", \"level=lv\"], // otherParam:{\"otherParam\":\"zTreeAsyncTest\"}, dataFilter: this.filter } };
View Code
> 编写响应数据处理方法
filter(treeId, parentNode,responseData) { console.log(responseData); if (responseData) { for(var i =0; i < responseData.length; i++) { responseData[i].name += \"动态节点数据\" + responseData[i].id; } } return responseData; }
View Code
3.7.3 代码总汇
{ \"data\": [ { \"id\": 1, \"pId\": 0, \"name\": \"1 one\" }, { \"id\": 11, \"pId\": 1, \"name\": \"1.1 oneToOne\" }, { \"id\": 12, \"pId\": 1, \"name\": \"1.2 oneToTwo\" }, { \"id\": 2, \"pId\": 0, \"name\": \"2 two\" } ] }
模拟后台响应数据
<ul class=\"ztree\"><ul></ul>
HTML
import { Component, OnInit } from \'@angular/core\'; declare var $ : any; @Component({ selector: \'app-root\', templateUrl: \'./app.component.html\', styleUrls: [\'./app.component.scss\'] }) export class AppComponent implements OnInit { setting = { view: { showLine: true, showIcon: true, fontCss: this.getFont }, data: { simpleData: { enable: true, idKey: \'id\', pIdKey: \'pId\' } }, callback: { onClick: this.onCzTreeOnClick }, async: { enable: true, url:\"http://localhost:3000/data\", type: \"get\", // autoParam:[\"id\", \"name=n\", \"level=lv\"], // otherParam:{\"otherParam\":\"zTreeAsyncTest\"}, dataFilter: this.filter } }; // zNodes = [ // {id: 1, pId: 0, name: \'1 一级标题\', open: true, iconOpen:\"assets/zTree/css/zTreeStyle/img/diy/1_open.png\", iconClose:\"assets/zTree/css/zTreeStyle/img/diy/1_close.png\"}, // {id: 11, pId: 1, name: \'1.1 二级标题\', open: true, font:{\'background-color\':\'skyblue\', \'color\':\'white\'}}, // {id: 111, pId: 11, name: \'1.1.1 三级标题 -> 博客园1\', url: \'http://www.cnblogs.com/NeverCtrl-C/\', target: \'_blank\'}, // {id: 113, pId: 11, name: \'1.1.1 三级标题 -> 博客园2\', url: \'http://www.cnblogs.com/NeverCtrl-C/\', target: \'_self\'}, // {id: 112, pId: 11, name: \'1.1.2 三级标题 -> 单击\', click: \"alert(\'你单击了\')\"}, // {id: 12, pId: 1, name: \'1.2 二级标题\'}, // {id: 2, pId: 0, name: \'2 一级标题\'} // ] getFont(treeId, node) { return node.font ? node.font : {}; } filter(treeId, parentNode,responseData) { console.log(responseData); if (responseData) { for(var i =0; i < responseData.length; i++) { responseData[i].name += \"动态节点数据\" + responseData[i].id; } } return responseData; } onCzTreeOnClick(event, treeId, treeNode, clickFlag) { alert(treeNode.name); } constructor() { } ngOnInit() { console.log(\'打印输出jquery对象\'); console.log($); console.log(\'但因输出zTree对象\'); console.log($.fn.zTree); // $.fn.zTree.init($(\"#ztree\"),this.setting,this.zNodes); $.fn.zTree.init($(\"#ztree\"),this.setting); } }
TS
3.7.4 效果展示
暂无评论内容