写angular2项目时,需要用到tree结构。测试了一部分,在这里记录下。因为官网的样式与我想要的有些出入,因此还要对官网样式做修改。
达到的效果
初渲染:
右击之后:
官网相关
官网地址:https://ng.ant.design/components/tree/zh#api
官网样式:
官网代码:
import { Component } from '@angular/core';
import { NzFormatEmitEvent } from 'ng-zorro-antd/tree';
@Component({
selector: 'nz-demo-tree-draggable',
template: ` <nz-tree [nzData]="nodes" nzDraggable nzBlockNode (nzOnDrop)="nzEvent($event)"> </nz-tree> `
})
export class NzDemoTreeDraggableComponent {
nodes = [
{
title: '0-0',
key: '00',
expanded: true,
children: [
{
title: '0-0-0',
key: '000',
expanded: true,
children: [
{ title: '0-0-0-0', key: '0000', isLeaf: true },
{ title: '0-0-0-1', key: '0001', isLeaf: true },
{ title: '0-0-0-2', key: '0002', isLeaf: true }
]
},
{
title: '0-0-1',
key: '001',
children: [
{ title: '0-0-1-0', key: '0010', isLeaf: true },
{ title: '0-0-1-1', key: '0011', isLeaf: true },
{ title: '0-0-1-2', key: '0012', isLeaf: true }
]
},
{
title: '0-0-2',
key: '002'
}
]
},
{
title: '0-1',
key: '01',
children: [
{
title: '0-1-0',
key: '010',
children: [
{ title: '0-1-0-0', key: '0100', isLeaf: true },
{ title: '0-1-0-1', key: '0101', isLeaf: true },
{ title: '0-1-0-2', key: '0102', isLeaf: true }
]
},
{
title: '0-1-1',
key: '011',
children: [
{ title: '0-1-1-0', key: '0110', isLeaf: true },
{ title: '0-1-1-1', key: '0111', isLeaf: true },
{ title: '0-1-1-2', key: '0112', isLeaf: true }
]
}
]
},
{
title: '0-2',
key: '02',
isLeaf: true
}
];
nzEvent(event: NzFormatEmitEvent): void {
console.log(event);
}
}
我借鉴的官网代码
import { Component } from '@angular/core';
import { NzContextMenuService, NzDropdownMenuComponent } from 'ng-zorro-antd/dropdown';
import { NzFormatEmitEvent, NzTreeNode } from 'ng-zorro-antd/tree';
@Component({
selector: 'nz-demo-tree-directory',
template: `
<nz-tree
nzBlockNode
[nzData]="nodes"
(nzClick)="activeNode($event)"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node">
<span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)">
<i nz-icon [nzType]="node.isExpanded ? 'folder-open' : 'folder'" (click)="openFolder(node)"></i>
<span class="folder-name">{
{ node.title }}</span>
<span class="folder-desc">created by {
{ origin.author | lowercase }}</span>
</span>
<span *ngIf="node.isLeaf" (contextmenu)="contextMenu($event, menu)">
<i nz-icon nzType="file"></i>
<span class="file-name">{
{ node.title }}</span>
<span class="file-desc">modified by {
{ origin.author | lowercase }}</span>
</span>
</span>
</ng-template>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu>