Компоненты PrimeNG
Tree

Дерево

PrimeNG/Tree (opens in a new tab)

Дерево используется для отображения иерархических данных.

С чего начать

Подключите модуль

import { TreeModule } from 'primeng/tree';

В .ts файле

import { ChangeDetectionStrategy, Component, OnInit, ChangeDetectorRef } from '@angular/core';
import { TreeNode } from 'primeng/api';
 
@Component({
  selector: 'app-prime-tree',
  templateUrl: './prime-tree.component.html',
  styleUrls: ['./prime-tree.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class PrimeTreeComponent implements OnInit {
  filesBasic: TreeNode[] = fileBasic;
  filesProg: TreeNode[] = fileProg;
  filestemplating: TreeNode[] = fileTemplating;
  filesSingleSelection: TreeNode[] = fileSingleSelection;
  filesMultipleSelectionMeta: TreeNode[] = fileMultipleSelectionMeta;
  filesMultipleSelectionCheckbox: TreeNode[] = fileMultipleSelectionCheckbox;
  filesLenientFilter: TreeNode[] = fileLenientFilter;
  filesStrictFilter: TreeNode[] = fileStrictFilter;
  filesRegularScroll: TreeNode[] = fileRegularScroll;
  filesFlexibleViewport: TreeNode[] = fileFlexibleViewport;
  filesVirtualScroll: TreeNode[] = fileVirtualScroll;
  filesHorizontal: TreeNode[] = fileHorizontal;
  filesLazy: TreeNode[] = fileLazy;
 
  selectedFile?: TreeNode;
  selectedFile1?: TreeNode;
  selectedFile2?: TreeNode;
  selectedFile3?: TreeNode;
  selectedFile4?: TreeNode;
 
  dialogVisible: boolean;
 
  loading: boolean;
 
  constructor(private ref: ChangeDetectorRef) {}
 
  ngOnInit(): void {
    this.filesVirtualScroll = Array.from({length: 50}).map((_,i) => this.createNode(i, 1000));
 
    this.loading = true;
    setTimeout(() => {
      this.loading = false;
      this.ref.detectChanges();
    }, 5000);
  }
 
  expandAll() {
    this.filesProg.forEach((node) => {
      this.expandRecursive(node, true);
    });
  }
 
  collapseAll() {
    this.filesProg.forEach((node) => {
      this.expandRecursive(node, false);
    });
  }
 
  showDialog() {
    this.dialogVisible = true;
  }
 
  createNode(i: number, children: number): TreeNode {
    let node: TreeNode = {
      label: 'Node ' + i,
      data: 'Node ' + i,
      expandedIcon: 'pi pi-folder-open',
      collapsedIcon: 'pi pi-folder',
      children: Array.from({ length: children }).map((_, j) => {
        return {
          label: 'Node ' + i + '.' + j,
          data: 'Node ' + i + '.' + j,
          icon: 'pi pi-file-o'
        }
      })
    };
 
    return node;
  }
 
  private expandRecursive(node: TreeNode, isExpand: boolean) {
    node.expanded = isExpand;
    if (node.children) {
      node.children.forEach((childNode) => {
        this.expandRecursive(childNode, isExpand);
      });
    }
  }
}
 
const fileBasic: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileProg: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileTemplating: TreeNode[] = [
  {
    key: '0',
    label: 'Introduction',
    children: [
      { key: '0-0', label: 'What is Angular', data: 'https://angular.io', type: 'url' },
      { key: '0-1', label: 'Getting Started', data: 'https://angular.io/guide/setup-local', type: 'url' },
      { key: '0-2', label: 'Learn and Explore', data: 'https://angular.io/guide/architecture', type: 'url' },
      { key: '0-3', label: 'Take a Look', data: 'https://angular.io/start', type: 'url' }
    ]
  },
  {
    key: '1',
    label: 'Components In-Depth',
    children: [
      { key: '1-0', label: 'Component Registration', data: 'https://angular.io/guide/component-interaction', type: 'url' },
      { key: '1-1', label: 'User Input', data: 'https://angular.io/guide/user-input', type: 'url' },
      { key: '1-2', label: 'Hooks', data: 'https://angular.io/guide/lifecycle-hooks', type: 'url' },
      { key: '1-3', label: 'Attribute Directives', data: 'https://angular.io/guide/attribute-directives', type: 'url' }
    ]
  }
];
 
const fileSingleSelection: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileMultipleSelectionMeta: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileMultipleSelectionCheckbox: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileLenientFilter: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileStrictFilter: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileRegularScroll: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileFlexibleViewport: TreeNode[] = [
  {
    label: 'Documents',
    data: 'Documents Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Work',
        data: 'Work Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Expenses.doc',
            icon: 'pi pi-file',
            data: 'Expenses Document',
          },
          {
            label: 'Resume.doc',
            icon: 'pi pi-file',
            data: 'Resume Document',
          },
        ],
      },
      {
        label: 'Home',
        data: 'Home Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Invoices.txt',
            icon: 'pi pi-file',
            data: 'Invoices for this month',
          },
        ],
      },
    ],
  },
  {
    label: 'Pictures',
    data: 'Pictures Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'barcelona.jpg',
        icon: 'pi pi-image',
        data: 'Barcelona Photo',
      },
      {
        label: 'logo.jpg',
        icon: 'pi pi-image',
        data: 'PrimeFaces Logo',
      },
      {
        label: 'primeui.png',
        icon: 'pi pi-image',
        data: 'PrimeUI Logo',
      },
    ],
  },
  {
    label: 'Movies',
    data: 'Movies Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Al Pacino',
        data: 'Pacino Movies',
        children: [
          {
            label: 'Scarface',
            icon: 'pi pi-video',
            data: 'Scarface Movie',
          },
          {
            label: 'Serpico',
            icon: 'pi pi-video',
            data: 'Serpico Movie',
          },
        ],
      },
      {
        label: 'Robert De Niro',
        data: 'De Niro Movies',
        children: [
          {
            label: 'Goodfellas',
            icon: 'pi pi-video',
            data: 'Goodfellas Movie',
          },
          {
            label: 'Untouchables',
            icon: 'pi pi-video',
            data: 'Untouchables Movie',
          },
        ],
      },
    ],
  },
];
 
const fileVirtualScroll: TreeNode[] = [
  {
    label: 'Lazy Node 0',
    data: 'Node 0',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    leaf: false
  },
  {
    label: 'Lazy Node 1',
    data: 'Node 1',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    leaf: false
  },
  {
    label: 'Lazy Node 1',
    data: 'Node 2',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    leaf: false
  }
];
 
const fileHorizontal: TreeNode[] = [
  {
    label: 'Root',
    data: 'Root Folder',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    children: [
      {
        label: 'Documents',
        data: 'Documents Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Work',
            data: 'Work Folder',
            expandedIcon: 'pi pi-folder-open',
            collapsedIcon: 'pi pi-folder',
            children: [
              { label: 'Expenses.doc', icon: 'pi pi-file', data: 'Expenses Document' },
              {
                label: 'Resume.doc',
                icon: 'pi pi-file',
                data: 'Resume Document',
              },
            ],
          },
          {
            label: 'Home',
            data: 'Home Folder',
            expandedIcon: 'pi pi-folder-open',
            collapsedIcon: 'pi pi-folder',
            children: [{ label: 'Invoices.txt', icon: 'pi pi-file', data: 'Invoices for this month' }],
          },
        ],
      },
      {
        label: 'Pictures',
        data: 'Pictures Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          { label: 'barcelona.jpg', icon: 'pi pi-image', data: 'Barcelona Photo' },
          { label: 'logo.jpg', icon: 'pi pi-image', data: 'PrimeFaces Logo' },
          { label: 'primeui.png', icon: 'pi pi-image', data: 'PrimeUI Logo' },
        ],
      },
      {
        label: 'Movies',
        data: 'Movies Folder',
        expandedIcon: 'pi pi-folder-open',
        collapsedIcon: 'pi pi-folder',
        children: [
          {
            label: 'Al Pacino',
            data: 'Pacino Movies',
            children: [
              { label: 'Scarface', icon: 'pi pi-video', data: 'Scarface Movie' },
              {
                label: 'Serpico',
                icon: 'pi pi-video',
                data: 'Serpico Movie',
              },
            ],
          },
          {
            label: 'Robert De Niro',
            data: 'De Niro Movies',
            children: [
              { label: 'Goodfellas', icon: 'pi pi-video', data: 'Goodfellas Movie' },
              {
                label: 'Untouchables',
                icon: 'pi pi-video',
                data: 'Untouchables Movie',
              },
            ],
          },
        ],
      },
    ],
  },
];
 
const fileLazy: TreeNode[] = [
  {
    label: 'Lazy Node 0',
    data: 'Node 0',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    leaf: false,
  },
  {
    label: 'Lazy Node 1',
    data: 'Node 1',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    leaf: false,
  },
  {
    label: 'Lazy Node 1',
    data: 'Node 2',
    expandedIcon: 'pi pi-folder-open',
    collapsedIcon: 'pi pi-folder',
    leaf: false,
  },
];

Встройте компонент с помощью тэга p-tree.

Basic

Lazy

Programmatic

Templating

node.label ** node.label **

Single Selection

Multiple Selection with Metakey

Multiple Selection with Checkbox

Lenient Filter Mode

Strict Filter Mode

Regular Scroll

Flexible Viewport

Virtual Scroll

Horizontal

Свойства

NameTypeDefaultDescription
valuearraynullAn array of treenodes.
selectionModestringnullDefines the selection mode, valid values "single", "multiple", and "checkbox".
selectionanynullA single treenode instance or an array to refer to the selections.
stylestringnullInline style of the component.
styleClassstringnullStyle class of the component.
contextMenuContextMenunullContext menu instance.
layoutstringverticalDefines the orientation of the tree, valid values are 'vertical' and 'horizontal'.
draggableScopestring/arraynullScope of the draggable nodes to match a droppableScope.
droppableScopestring/arraynullScope of the droppable nodes to match a draggableScope.
draggableNodesbooleanfalseWhether the nodes are draggable.
droppableNodesbooleanfalseWhether the nodes are droppable.
metaKeySelectionbooleantrueDefines 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.
propagateSelectionUpbooleantrueWhether checkbox selections propagate to ancestor nodes.
propagateSelectionDownbooleantrueWhether checkbox selections propagate to descendant nodes.
loadingbooleanfalseDisplays a loader to indicate data load is in progress.
loadingIconstringpi pi-spinnerThe icon to show while indicating data load is in progress.
emptyMessagestringNo records foundText to display when there is no data.
ariaLabelstringUsed to define a string that labels the tree.
ariaLabelledBystringpi pi-spinnerEstablishes relationships between the component and label(s) where its value should be one or more element IDs.
togglerAriaLabelstringDefines a string that labels the toggler icon for accessibility.
validateDropbooleanfalseWhen enabled, drop can be accepted or rejected based on condition defined at onNodeDrop.
filterbooleanfalseWhen specified, displays an input field to filter the items.
filterBystringlabelWhen filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
filterModestringlenientMode for filtering valid values are "lenient" and "strict". Default is lenient.
filterPlaceholderstringnullPlaceholder text to show when filter input is empty.
filterLocalestringundefinedLocale to use in filtering. The default locale is the host environment's current locale.
scrollHeightstringnullHeight of the scrollable viewport.
virtualScrollbooleanfalseWhether the data should be rendered on demand during scroll.
virtualNodeHeightnumbernullHeight of a node to use in calculations of virtual scrolling.
minBufferPxnumbernullMinimum amount of content buffer (in pixels) that the viewport must render.
maxBufferPxnumbernullConfigures how much buffer space to render back up to when it detects that more buffer is required.
trackByFunctionnullFunction to optimize the node list rendering, default algoritm checks for object identity.
indentationnumber1.5Indentation factor for spacing of the nested node when virtual scrolling is enabled.

События

NameParametersDescription
onNodeSelectevent.originalEvent: browser event<br>event.node: Selected node instance.Callback to invoke when a node is selected.
onNodeUnselectevent.originalEvent: browser event<br>event.node: Unselected node instance.Callback to invoke when a node is unselected.
onNodeExpandevent.originalEvent: browser event<br>event.node: Expanded node instance.Callback to invoke when a node is expanded.
onNodeCollapseevent.originalEvent: browser event<br>event.node: Collapsed node instance.Callback to invoke when a node is collapsed.
onNodeContextMenuSelectevent.originalEvent: browser event<br>event.node: Selected node instance.Callback to invoke when a node is selected with right click.
onNodeDropevent.originalEvent: browser event<br>event.dragNode: Dragged node instance<br>event.dropNode: Dropped node instance. event.index: Index of the dropped node within siblings.Callback to invoke when a node is dropped.
onFilterevent.filter: Filter value used in filtering.<br>event.filteredValue: Filtered data after running the filtering.Callback to invoke when data is filtered.

Методы

NameParametersDescription
resetFilter-Resets filtering.
_filtervalue: stringApplies filter by given value.

Шаблоны

NameParameters
header-
empty-
footer-

Стилизация

NameElement
p-treeMain container element
p-tree-horizontalMain container element in horizontal mode
p-tree-containerContainer of nodes
p-treenodeA treenode element
p-treenode-contentContent of a treenode
p-treenode-togglerToggle icon
p-treenode-iconIcon of a treenode
p-treenode-labelLabel of a treenode
p-treenode-childrenContainer element for node children