详解Angular结合zTree异步加载节点数据

1 前提准备

1.1 新建一个angular4项目

参考:

1.2 去zTree官网下载zTree

zTree官网:

三少使用的版本:

1.3 参考博客

2 编程步骤

  

从打印出zTree对象可以看出,zTree对象利用init方法来实现zTree结构;init方法接收三个参数

参数1:一个ul标签的DOM节点对象

参数2:基本配置对象

参数3:标题信息数组

2.1 在index.html中引入相关js、css

<Meta charset="utf-8"> TestZtree

<Meta name="viewport" content="width=device-width,initial-scale=1">

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 二级标题',font:{'background-color':'skyblue','color':'white'}},// {id: 111,pId: 11,name: '1.1.1 三级标题 -> 博客园',url: 'http://www.cnblogs.com/NeverCtrl-C/'},// {id: 112,name: '1.1.2 三级标题 -> 单击',click: "alert('你单击了')"},// {id: 12,name: '1.2 二级标题'},// {id: 2,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,name: '1 一级标题'},{id: 11,name: '1.1 二级标题'},{id: 111,name: '1.1.1 三级标题'},{id: 112,name: '1.1.2 三级标题'},{id: 12,{id: 2,name: '2 一级标题'}
];
constructor() { }
ngOnInit() {
console.log($);
console.log($.fn.zTree);
$.fn.zTree.init($("#ztree"),this.setting,this.zNodes);
}
}

View Code

2.4 在组件HTML中编写代码

    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,name: '1.1.1 三级标题 -> 博客园1',url: 'http://www.cnblogs.com/NeverCtrl-C/',target: '_blank'},{id: 113,name: '1.1.1 三级标题 -> 博客园2',target: '_self'},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,clickFlag) { alert(treeNode.name); }
    View Code

    3.6.3 代码汇总

    import { Component,styleUrls: ['./app.component.scss'] }) export class AppComponent implements OnInit { setting = { view: { showLine: true,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,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,clickFlag) { alert(treeNode.name); } constructor() { } ngOnInit() { console.log('打印输出jquery对象'); console.log($); console.log('但因输出zTree对象'); console.log($.fn.zTree); $.fn.zTree.init($("#ztree"),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,"name": "2 two" } ]

    技巧02:三少偷懒,是利用json-server模拟的后台数据,哈哈;json-server

    > 设置基本配置对象的async属性

    setting = { view: { showLine: true,async: { enable: true,url:"http://localhost:3000/data",type: "get",// autoparam:["id",// otherParam:{"otherParam":"zTreeasynctest"},dataFilter: this.filter } };
    View Code

    > 编写响应数据处理方法

    filter(treeId,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,{ "id": 11,"pId": 1,"name": "1.1 onetoOne" },{ "id": 12,"name": "1.2 onetoTwo" },"name": "2 two" } ] }
    模拟后台响应数据
    HTML
    import { Component,OnInit } from '@angular/core'; declare var $ : any;

    @Component({
    selector: 'app-root',styleUrls: ['./app.component.scss']
    })
    export class AppComponent implements OnInit {

    setting = {
    view: {
    showLine: true,dataFilter: this.filter
    }
    };

    // zNodes = [
    // {id: 1,// {id: 113,name: '2 一级标题'}
    // ]

    getFont(treeId,node) {
    return node.font ? node.font : {};
    }

    filter(treeId,responseData) {
    console.log(responseData);
    if (responseData) {
    for(var i =0; i < responseData.length; i++) {
    responseData[i].name += "动态节点数据" + responseData[i].id;
    }
    }
    return responseData;
    }

    onCzTreeOnClick(event,clickFlag) {
    alert(treeNode.name);
    }

    constructor() { }

    ngOnInit() {
    console.log('打印输出jquery对象');
    console.log($);
    console.log('但因输出zTree对象');
    console.log($.fn.zTree);
    // $.fn.zTree.init($("#ztree"),this.zNodes);
    $.fn.zTree.init($("#ztree"),this.setting);
    }
    }

    TS

    3.7.4 效果展示

    异步加载

    相关文章

    前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
    前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
    前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
    前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
    前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
    前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...