詳解Angular結(jié)合zTree異步加載節(jié)點數(shù)據(jù)
1 前提準(zhǔn)備
1.1 新建一個angular4項目
參考:http://www.dbjr.com.cn/article/119668.htm

1.2 去zTree官網(wǎng)下載zTree
zTree官網(wǎng):點擊前往
三少使用的版本:點擊前往

1.3 參考博客
http://www.dbjr.com.cn/article/133284.htm
2 編程步驟

從打印出zTree對象可以看出,zTree對象利用init方法來實現(xiàn)zTree結(jié)構(gòu);init方法接收三個參數(shù)
參數(shù)1:一個ul標(biāo)簽的DOM節(jié)點對象
參數(shù)2:基本配置對象
參數(shù)3:標(biāo)題信息數(shù)組
2.1 在index.html中引入相關(guān)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>
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 一級標(biāo)題', 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 二級標(biāo)題', open: true, font:{'background-color':'skyblue', 'color':'white'}},
// {id: 111, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園', url: 'http://www.cnblogs.com/NeverCtrl-C/'},
// {id: 112, pId: 11, name: '1.1.2 三級標(biāo)題 -> 單擊', click: "alert('你單擊了')"},
// {id: 12, pId: 1, name: '1.2 二級標(biāo)題'},
// {id: 2, pId: 0, name: '2 一級標(biāo)題'}
// ]
// 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 一級標(biāo)題'},
{id: 11, pId: 1, name: '1.1 二級標(biāo)題'},
{id: 111, pId: 11, name: '1.1.1 三級標(biāo)題'},
{id: 112, pId: 11, name: '1.1.2 三級標(biāo)題'},
{id: 12, pId: 1, name: '1.2 二級標(biāo)題'},
{id: 2, pId: 0, name: '2 一級標(biāo)題'}
];
constructor() { }
ngOnInit() {
console.log($);
console.log($.fn.zTree);
$.fn.zTree.init($("#ztree"),this.setting,this.zNodes);
}
}
2.4 在組件HTML中編寫代碼
<ul class="ztree"><ul></ul>
2.5 效果展示

3 zTree基本功能
3.1 不顯示連接線
3.1.1 官方文檔
不顯示標(biāo)題之間的連接線

3.1.2 編程步驟
在基本配置對象中指定showLine屬性的值為false即可
setting = {
data: {
simpleData: {
enable: true
}
},
view: {
showLine: false
}
};
3.2 不顯示節(jié)點圖標(biāo)
3.2.1 官方文檔
去掉節(jié)點前面的圖標(biāo)

3.2.2 編程步驟
將基本配置對象的showIcon屬性設(shè)為false即可

setting = {
data: {
simpleData: {
enable: true
}
},
view: {
showLine: false,
showIcon: false
}
};
3.3 自定義節(jié)點圖標(biāo)
3.3.1 官方文檔
更改節(jié)點的圖標(biāo)

3.3.2 編程步驟
為treeNode節(jié)點數(shù)據(jù)設(shè)置icon/iconOpen/iconClose屬性即可

3.4 自定義字體
3.4.1 官方文檔
更改節(jié)點字體的樣式

3.4.2 編程步驟
為treeNode節(jié)點數(shù)據(jù)設(shè)置font屬性即可,font屬性的值是一個對象,該對象的內(nèi)容和style的數(shù)據(jù)一樣

3.4.3 效果展示

3.5 超鏈接
3.5.1 官方文檔
點擊節(jié)點標(biāo)題就會自動跳轉(zhuǎn)到對應(yīng)的url
注意01:click屬性只能進(jìn)行最簡單的 click 事件操作。相當(dāng)于 的內(nèi)容。 如果操作較復(fù)雜,請使用 onClick 事件回調(diào)函數(shù)。

3.5.2 編程步驟
為treeNode節(jié)點數(shù)據(jù)設(shè)置url、click屬性即可
技巧01:設(shè)置click屬性時,屬性值必須是一些簡單的onClick事件
技巧02:設(shè)置target屬性時,屬性值有 _blank 和 _self
_blank -> 用一個新窗口打開
_self -> 在原來的窗口打開

zNodes = [
{id: 1, pId: 0, name: '1 一級標(biāo)題', 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 二級標(biāo)題', open: true, font:{'background-color':'skyblue', 'color':'white'}},
{id: 111, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園1', url: 'http://www.cnblogs.com/NeverCtrl-C/', target: '_blank'},
{id: 113, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園2', url: 'http://www.cnblogs.com/NeverCtrl-C/', target: '_self'},
{id: 112, pId: 11, name: '1.1.2 三級標(biāo)題 -> 單擊', click: "alert('你單擊了')"},
{id: 12, pId: 1, name: '1.2 二級標(biāo)題'},
{id: 2, pId: 0, name: '2 一級標(biāo)題'}
]
3.6 單擊控制
3.6.1 官方文檔
點擊節(jié)點標(biāo)題時觸發(fā)相應(yīng)的方法
技巧01:在angular中可以利用這個用法來實現(xiàn)路由跳轉(zhuǎn)

3.6.2 編程步驟
設(shè)置基本配置對象的onClick屬性
技巧01:onClick屬性值是一個方法的引用,我們需要自己編寫這個方法

setting = {
view: {
showLine: true,
showIcon: true,
fontCss: this.getFont
},
data: {
simpleData: {
enable: true,
idKey: 'id',
pIdKey: 'pId'
}
},
callback: {
onClick: this.onCzTreeOnClick
}
};
編寫onClick觸發(fā)方法

onCzTreeOnClick(event, treeId, treeNode, clickFlag) {
alert(treeNode.name);
}
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 一級標(biāo)題', 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 二級標(biāo)題', open: true, font:{'background-color':'skyblue', 'color':'white'}},
{id: 111, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園1', url: 'http://www.cnblogs.com/NeverCtrl-C/', target: '_blank'},
{id: 113, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園2', url: 'http://www.cnblogs.com/NeverCtrl-C/', target: '_self'},
{id: 112, pId: 11, name: '1.1.2 三級標(biāo)題 -> 單擊', click: "alert('你單擊了')"},
{id: 12, pId: 1, name: '1.2 二級標(biāo)題'},
{id: 2, pId: 0, name: '2 一級標(biāo)題'}
]
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 += "動態(tài)節(jié)點數(shù)據(jù)" + 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);
}
}
3.7 異步加載節(jié)點數(shù)據(jù)
3.7.1 官方文檔
節(jié)點的數(shù)據(jù)是從后臺進(jìn)行獲取的

3.7.2 編程步驟
技巧01:異步加載節(jié)點數(shù)據(jù)時init方法不用傳遞第三個參數(shù)

> 準(zhǔn)備一個后臺用于返回JSON格式的數(shù)據(jù)
技巧01:返回的JSON數(shù)據(jù)是一個列表,格式為
[
{
"id": 1,
"pId": 0,
"name": "1 one"
},
{
"id": 2,
"pId": 0,
"name": "2 two"
}
]
技巧02:三少偷懶,是利用json-server模擬的后臺數(shù)據(jù),哈哈;json-server
> 設(shè)置基本配置對象的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
}
};
> 編寫響應(yīng)數(shù)據(jù)處理方法

filter(treeId, parentNode,responseData) {
console.log(responseData);
if (responseData) {
for(var i =0; i < responseData.length; i++) {
responseData[i].name += "動態(tài)節(jié)點數(shù)據(jù)" + responseData[i].id;
}
}
return responseData;
}
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>
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 一級標(biāo)題', 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 二級標(biāo)題', open: true, font:{'background-color':'skyblue', 'color':'white'}},
// {id: 111, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園1', url: 'http://www.cnblogs.com/NeverCtrl-C/', target: '_blank'},
// {id: 113, pId: 11, name: '1.1.1 三級標(biāo)題 -> 博客園2', url: 'http://www.cnblogs.com/NeverCtrl-C/', target: '_self'},
// {id: 112, pId: 11, name: '1.1.2 三級標(biāo)題 -> 單擊', click: "alert('你單擊了')"},
// {id: 12, pId: 1, name: '1.2 二級標(biāo)題'},
// {id: 2, pId: 0, name: '2 一級標(biāo)題'}
// ]
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 += "動態(tài)節(jié)點數(shù)據(jù)" + 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);
}
}
3.7.4 效果展示

相關(guān)文章
Angular.js初始化之ng-app的自動綁定與手動綁定詳解
這篇文章主要給大家介紹了關(guān)于Angular.js初始化之ng-app的自動綁定與手動綁定的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
詳解Angular路由 ng-route和ui-router的區(qū)別
這篇文章主要介紹了詳解Angular路由 ng-route和ui-router的區(qū)別,分別介紹了兩種路由的用法和區(qū)別,有興趣的可以了解一下2017-05-05
AngularJS實現(xiàn)controller控制器間共享數(shù)據(jù)的方法示例
這篇文章主要介紹了AngularJS實現(xiàn)controller控制器間共享數(shù)據(jù)的方法,結(jié)合簡單實例形式分析了AngularJS控制器數(shù)據(jù)共享的實現(xiàn)方法,需要的朋友可以參考下2017-10-10
angularJs自定義過濾器實現(xiàn)手機(jī)號信息隱藏的方法
今天小編就為大家分享一篇angularJs自定義過濾器實現(xiàn)手機(jī)號信息隱藏的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
angularJS自定義directive之帶參方法傳遞詳解
今天小編就為大家分享一篇angularJS自定義directive之帶參方法傳遞詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10

