--treetable用于显示分层数据表格的格式

Import

import {TreeTableModule,TreeNode,SharedModule} from 'primeng/primeng';

Getting Started

treetable组件需要TreeNode对象数组的值。让我们开始与树节点的API。

Name  Type Default Description
label string null Label of the node.
data any null Data represented by the node.
icon string null Icon of the node to display next to content. Not used by TreeTable.
expandedIcon string null Icon to use in expanded state. Not used by TreeTable.
collapsedIcon string null Icon to use in collapsed state. Not used by TreeTable.
children TreeNode[] null An array of treenodes as children.
leaf boolean null Specifies if the node has children. Used in lazy loading.
style string null Inline style of the node.
styleClass string null Style class of the node.
一般情况,节点将从服务端获取,下面是一个例子nodeservice获取的数据从一个JSON文件。
@Injectable()
export class NodeService {constructor(private http: Http) {}getFilesystem() {return this.http.get('showcase/resources/data/filesystem.json').toPromise().then(res => <TreeNode[]> res.json().data);}
}

filesystem.json文件是模拟样本数据。在实际应用中,这应该是从远程调用产生的动态响应。
@Injectable()
export class NodeService {constructor(private http: Http) {}getFilesystem() {return this.http.get('showcase/resources/data/filesystem.json').toPromise().then(res => <TreeNode[]> res.json().data);}
}The filesystem.json file consists of sample data. In a real application, this should be a dynamic response generated from the remote call.{"data":[  {  "data":{  "name":"Documents","size":"75kb","type":"Folder"},"children":[{  "data":{  "name":"Work","size":"55kb","type":"Folder"},"children":[  {  "data":{  "name":"Expenses.doc","size":"30kb","type":"Document"}},{  "data":{  "name":"Resume.doc","size":"25kb","type":"Resume"}}]},{  "data":{  "name":"Home","size":"20kb","type":"Folder"},"children":[  {  "data":{  "name":"Invoices","size":"20kb","type":"Text"}}]}]},{  "data":{  "name":"Pictures","size":"150kb","type":"Folder"},"children":[  {  "data":{  "name":"barcelona.jpg","size":"90kb","type":"Picture"}},{  "data":{  "name":"primeui.png","size":"30kb","type":"Picture"}},{  "data":{  "name":"optimus.jpg","size":"30kb","type":"Picture"}}]}]
}

使用此服务的组件调用getfiles()和分配他们到文件属性绑定到树。
export class TreeTableDemoComponent implements OnInit {files: TreeNode[];constructor(private nodeService: NodeService) {}ngOnInit() {this.nodeService.getFileSystem().then(files => this.files = files);}}

 
<p-treeTable [value]="files"><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable>

 

列组件

利用以下列treetable组件定义选项。

属性

Name  Type Default Description
field string null Property of a row data.
header string null Header text of a column.
footer string null Footer text of a column.
style string null Inline style of the column.
styleClass string null Style class of the column.
<p-column field="vin" header="Vin"></p-column>

动态列

列可以被实例化使用数组以及ngfor迭代。

export class TreeTableDemoComponent implements OnInit {files: TreeNode[];constructor(private nodeService: NodeService) {}ngOnInit() {this.nodeService.getFileSystem().then(files => this.files = files);this.cols = [{field: 'name', header: 'Name'},{field: 'size', header: 'Size'},{field: 'type', header: 'Type'}];}}
}

 
<p-treeTable [value]="cars"><p-column *ngFor="let col of cols" [field]="col.field" [header]="col.header"></p-column>
</p-treeTable>

Facets

页眉和页脚是可以显示自定义内容的两个部分。

import {Header} from 'primeng/primeng';
import {Footer} from 'primeng/primeng';

 
<p-treeTable [value]="files"><p-header>List of Files</p-header><p-footer>Choose from the list.</p-footer><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable>

选择

treetable支持三的选择方法,single, multiple and checkbox。选择是通过设置SelectionMode属性设置为和提供一个单一的树或treenodes参考的选择根据选择模式阵列启用。

export class TreeTableDemoComponent implements OnInit {files: TreeNode[];selectedFile: TreeNode;constructor(private nodeService: NodeService) {}ngOnInit() {this.nodeService.getFiles().then(files => this.files = files);}}

 
<p-treeTable [value]="files" selectionMode="single" [(selection)]="selectedFile"></p-treeTable>

在多模式或复选框模式中,选择属性应为数组。在多模式项目可以选择使用元键或切换单独依靠metakeyselection属性值是真正的默认值。触摸功能的设备metakeyselection自动关闭。
    export class TreeTableDemoComponent implements OnInit {files: TreeNode[];selectedFiles: TreeNode[];constructor(private nodeService: NodeService) {}ngOnInit() {this.nodeService.getFiles().then(files => this.files = files);}}

 
<p-treeTable [value]="files" selectionMode="single" [(selection)]="selectedFiles"></p-treeTable>

onnodeselect和onnodeunselect treetable提供选项,选择特征回调。
export class TreeTableDemoComponent implements OnInit {files: TreeNode[];selectedFiles: TreeNode[];constructor(private nodeService: NodeService) {}ngOnInit() {this.nodeService.getFiles().then(files => this.files = files);}nodeSelect(event) {//event.node = selected node
    }}

通过将节点的可选属性设置为false,可以禁用特定节点的选择。

ContextMenu(上下文菜单)

treetable与ContextMenu独家整合。为了附上菜单一treetable,定义一个局部变量菜单模板并将其绑定到该treetable的ContextMenu属性。右键单击行的时候会使菜单展示。

<p-treeTable [value]="files" selectionMode="single" [(selection)]="selectedFile" [contextMenu]="cm"><p-header>Context Menu</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable><p-contextMenu #cm [model]="items"></p-contextMenu>

export class TreeTableDemoComponent implements OnInit {files: TreeNode[];selectedFile: TreeNode;constructor(private nodeService: NodeService) {}ngOnInit() {this.nodeService.getFiles().then(files => this.files = files);this.items = [{label: 'View', icon: 'fa-search', command: (event) => this.viewNode(this.selectedFile2)},{label: 'Delete', icon: 'fa-close', command: (event) => this.deleteNode(this.selectedFile2)}];}viewNode(node: TreeNode) {this.msgs = [];this.msgs.push({severity: 'info', summary: 'Node Selected', detail: node.data.name});}deleteNode(node: TreeNode) {node.parent.children = node.parent.children.filter( n => n.data !== node.data);this.msgs = [];this.msgs.push({severity: 'info', summary: 'Node Deleted', detail: node.data.name});}}

Templating(模板)

在TreeNode默认标签是一个树节点内的显示,如果你需要自定义内容定义ng模板列的列作为一个隐变量和rowData作为节点实例里面。类似地,自定义内容可以放在列的页眉和页脚上,模板。下面的示例将输入字段来创建可编辑的treenodes。

<h3>ng-template</h3>
<p-treeTable [value]="files"><p:column><ng-template let-col let-node="rowData" pTemplate="header"><button type="button" pButton label="Refresh"></button></ng-template><ng-template let-col let-node="rowData" pTemplate="body"><input [(ngModel)]="node.data.name" type="text" style="width:100%"></ng-template></p:column>
</p-treeTable>

Lazy Loading(懒加载)

处理大型数据集的懒惰加载很方便。而不是加载整个树,节点可以在onnodeexpand事件加载。实现懒惰加载的重要部分是将节点的叶子属性定义为false,这将指示树显示箭头图标,以指示该节点是否有子节点,但尚未加载。当懒惰的节点展开,onnodeexpand调用远程调用可以增加孩子扩展节点。

<p-treeTable [value]="files" (onNodeExpand)="loadNode($event)"></p-treeTable>

export class TreeTableDemoComponent implements OnInit {files: TreeNode[];selectedFiles: TreeNode[];constructor(private nodeService: NodeService) {}ngOnInit() {//initial nodesthis.nodeService.getFiles().then(files => this.files = files);}loadNode(event) {if(event.node) {//in a real application, make a call to a remote url to load children of the current node and add the new nodes as childrenthis.nodeService.getLazyFilesystem().then(nodes => event.node.children = nodes);}}}

假设在ngoninit treetable与数据像下面,节点没有实际的孩子但叶属性设置为false的节点初始化。

{"data":[  {  "data":{  "name":"Lazy Folder 0","size":"75kb","type":"Folder"},"leaf": false},{  "data":{  "name":"Lazy Folder 1","size":"150kb","type":"Folder"},"leaf": false}]
}

Attributes

Name  Type Default Description
value array null An array of treenodes.
labelExpand string Expand Tooltip and screenreader text for expand icon.
labelCollapse string Collapse Tooltip and screenreader text for collapse icon.
selectionMode string null Defines the selection mode, valid values "single" and "multiple".
selection any null A single treenode instance or an array to refer to the selections.
style string null Inline style of the component.
styleClass string null Style class of the component.
metaKeySelection boolean true Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.

Events

Name  Parameters Description
onNodeSelect event.originalEvent: browser event
event.node: Selected node instance.
Callback to invoke when a node is selected.
onNodeUnselect event.originalEvent: browser event
event.node: Unselected node instance.
Callback to invoke when a node is unselected.
onNodeExpand event.originalEvent: browser event
event.node: Expanded node instance.
Callback to invoke when a node is expanded.
onNodeCollapse event.originalEvent: browser event
event.node: Collapsed node instance.
Callback to invoke when a node is collapsed.
onContextMenuSelect event.originalEvent: browser event
event.node: Selected node instance.
Callback to invoke when a node is selected with right click.

Styling(样式)

以下是结构式的类列表,对于主题类主题页面访问。

Name  Element
ui-treetable Main container element
ui-treetable-header Header element
ui-treetable-tablewrapper Container of table
ui-treetable-footer Footer element

demo code

<p-growl [value]="msgs"></p-growl><p-treeTable [value]="files1"><p-header>Basic</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable><p-treeTable [value]="files2" selectionMode="single" [(selection)]="selectedFile"(onNodeSelect)="nodeSelect($event)" (onNodeUnselect)="nodeUnselect($event)" [style]="{'margin-top':'50px'}"><p-header>Singe Selection</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable>
<p>Selected Node: {{selectedFile ? selectedFile.data.name : 'none'}}</p><p-treeTable [value]="files3" selectionMode="multiple" [(selection)]="selectedFiles" (onNodeSelect)="nodeSelect($event)" (onNodeUnselect)="nodeUnselect($event)" [style]="{'margin-top':'50px'}"><p-header>Multiple Selection</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable>
<p>Selected Nodes: <span *ngFor="let file of selectedFiles">{{file.data.name}} </span></p><p-treeTable [value]="files4" selectionMode="checkbox" [(selection)]="selectedFiles2" [style]="{'margin-top':'50px'}"><p-header>Checkbox Selection</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable>
<p>Selected Nodes: <span *ngFor="let file of selectedFiles2">{{file.data.name}} </span></p><p-treeTable [value]="files5" [style]="{'margin-top':'50px'}"><p-header>Editable Cells with Templating</p-header><p-column field="name" header="Name"><ng-template let-node="rowData" pTemplate="body"><input type="text" [(ngModel)]="node.data.name" style="width:100%;border-width:0px 0px 1px 0px"></ng-template></p-column><p-column field="size" header="Size"><ng-template let-node="rowData" pTemplate="body"><input type="text" [(ngModel)]="node.data.size" style="width:100%;border-width:0px 0px 1px 0px"></ng-template></p-column><p-column field="type" header="Type"><ng-template let-node="rowData" pTemplate="body"><input type="text" [(ngModel)]="node.data.type" style="width:100%;border-width:0px 0px 1px 0px"></ng-template></p-column>
</p-treeTable><p-treeTable [value]="files6" selectionMode="single" [(selection)]="selectedFile2" [style]="{'margin-top':'50px'}" [contextMenu]="cm"><p-header>Context Menu</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable><p-treeTable [value]="lazyFiles" [style]="{'margin-top':'50px'}"(onNodeExpand)="nodeExpand($event)"><p-header>Lazy Loading</p-header><p-column field="name" header="Name"></p-column><p-column field="size" header="Size"></p-column><p-column field="type" header="Type"></p-column>
</p-treeTable>

export class TreeTableDemo implements OnInit {msgs: Message[];files1: TreeNode[];files2: TreeNode[];files3: TreeNode[];files4: TreeNode[];lazyFiles: TreeNode[];selectedFile: TreeNode;selectedFile2: TreeNode;selectedFiles: TreeNode[];constructor(private nodeService: NodeService) { }ngOnInit() {this.nodeService.getFilesystem().then(files => this.files = files);this.nodeService.getLazyFilesystem().then(files => this.lazyFiles = files);this.items = [{label: 'View', icon: 'fa-search', command: (event) => this.viewNode(this.selectedFile2)},{label: 'Delete', icon: 'fa-close', command: (event) => this.deleteNode(this.selectedFile2)}];}nodeSelect(event) {this.msgs = [];this.msgs.push({severity: 'info', summary: 'Node Selected', detail: event.node.data.name});}nodeUnselect(event) {this.msgs = [];this.msgs.push({severity: 'info', summary: 'Node Unselected', detail: event.node.data.name});}nodeExpand(event) {if(event.node) {//in a real application, make a call to a remote url to load children of the current node and add the new nodes as childrenthis.nodeService.getLazyFilesystem().then(nodes => event.node.children = nodes);}}viewNode(node: TreeNode) {this.msgs = [];this.msgs.push({severity: 'info', summary: 'Node Selected', detail: node.data.name});}deleteNode(node: TreeNode) {node.parent.children = node.parent.children.filter( n => n.data !== node.data);this.msgs = [];this.msgs.push({severity: 'info', summary: 'Node Deleted', detail: node.data.name});~}

参考资料:

https://www.primefaces.org/primeng/#/treetable

转载于:https://www.cnblogs.com/wdtzms/p/6759801.html

PrimeNG之TreeTable相关推荐

  1. PrimeNG TreeTable异步加载子树

    1. PrimeNG官网:https://www.primefaces.org/primeng/#/treetable 2. 引入TreeTableModule到自己的module.ts中 3. 页面 ...

  2. jquery插件treetable使用

    下载后treetable插件后只需要保留jquery.treetable.css样式文件,jquery.treetable.theme.default.css皮肤文件和jquery.treetable ...

  3. 原创jquery插件treeTable(转)

    由于工作需要,要直观的看到某个业务是由那些子业务引起的异常,所以我需要用树表的方式来展现各个层次的数据. 需求: 1.数据层次分明: 2.数据读取慢.需要动态加载孩子节点: 3.支持默认展开多少层. ...

  4. primeNG DataTable中Templating ng-template标签报错

    DataTable - Templating中自定义模板的时候报错:Template parse errors: 'ng-template' is not a known element: 解决:因为 ...

  5. 一个SAP UI5 TreeTable控件的错误分析

    问题:Jerry,TreeTable的这个报错您遇到过吗? TreeTable展开最后一行时就会报这个错,其他行展开都是正常的. 我的分析 错误原因在于,oBinding根据index 7,取回的no ...

  6. bootstrap 树形表格渲染慢_layUI之树状表格异步加载组件treetableAsync.js(基于treetable.js)...

    概述 后台框架中使用树状表格是非常常用的操作,layUI本身并没有这种组件. 第三方的treetable.js做到了完美的实现,但是不能实现在双击时异步加载数据,本文就是站在了巨人的肩膀上实现的异步加 ...

  7. java treetable_在Swing中创建TreeTable | 学步园

    TreeTable是Tree和Table的一个结合- 就是一个即能够展开和收起行,同时也能够显示多个列的组件.在Swing的标准包里没有一个叫做JtreeTable的组件,但是我们很容易通过把Jtre ...

  8. treetable怎么带参数_VUE treeTable 自定义方法怎么传递

    \#\#\# 问题描述早期element版本没有treetable vueadmin中有一种treetable的实现方法, 其中有说可以传递自定义解析数据的方法,但是我通过prop传递方法一直报错 \ ...

  9. jQuery.treetable使用及异步加载

    Usage 1 GitHub 地址 https://github.com/ludo/jquery-treetable/ 2 API 地址 http://ludo.cubicphuse.nl/jquer ...

最新文章

  1. html中的框架frameset和frame及iframe
  2. Oracle安装步骤及PL/SQL Developer连接数据库
  3. 此心拖泥带水,是人生最苦处
  4. centos7 yum源安装ruby27方法
  5. 腾讯面试编程题python_腾讯面试官出的 2 道经典数据分析面试题
  6. python初学者代码示例_Selenium 快速入门笔记和代码示例(Python版)
  7. 现代软件工程 第八章 【需求分析】练习与讨论
  8. 苹果CMS V10 播放记录_苹果cms10怎么更新集数?
  9. 来来来!2021最新Java面经分享
  10. Java使用ODBC连接Access数据库
  11. zeppelin配置hive教程
  12. 目标检测网络的知识蒸馏
  13. 测试不同体重体型软件样子的,一种智能体型体重测量仪的设计
  14. 聊聊手机之--小米6
  15. Web3.0:Skiff 去中心化隐私协同文档
  16. 一个硬盘的感人爱情故事
  17. 腾讯wifi管家竟然盗取我家wifi密码 惊讶!震惊!失望!
  18. 基于Eclipse+Java+Swing+Mysql实现酒店管理系统
  19. 应急照明市电检测_图文分析应急照明如何供电? 如何接线?
  20. pycharm2019安装后显示Failed to Create JVM.JVM PATH ... /jbr/

热门文章

  1. CGAL-SDF原理讲解以及使用
  2. 移动火柴(数学知识)
  3. 2009年IT十大争议人物四:张汝京
  4. 微信小程序打开红包效果
  5. Vue.js是什么?它有什么特点?
  6. 凯新生物高分子FITC-PEG-NHS的简介,Fluorescein-PEG-NHS
  7. 我读 《异类》 - 马尔科姆 · 格兰德威尔 / 马太效应
  8. 渠道广告联盟SDK接入思路总结
  9. js(自动补全三位小数)
  10. 华为AC+AP配置笔记