• TreeSelect树选择
    • 何时使用
    • 单独引入此组件
    • 代码演示
    • API
      • nz-tree-selectcomponent
        • 方法

    TreeSelect树选择

    树型选择控件。

    何时使用

    类似 Select 的选择控件,可选择的数据结构是一个树形结构时,可以使用 TreeSelect,例如公司层级、学科系统、分类目录等等。

    单独引入此组件

    想要了解更多关于单独引入组件的内容,可以在快速上手页面进行查看。

    1. import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';

    代码演示

    TreeSelect树选择 - 图1

    基本

    最简单的用法。

    1. import { Component, OnInit } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-tree-select-basic',
    4. template: `
    5. <nz-tree-select
    6. style="width: 250px"
    7. [nzDefaultExpandedKeys]="expandKeys"
    8. [nzNodes]="nodes"
    9. nzShowSearch
    10. nzPlaceHolder="Please select"
    11. [(ngModel)]="value"
    12. (ngModelChange)="onChange($event)"
    13. >
    14. </nz-tree-select>
    15. `
    16. })
    17. export class NzDemoTreeSelectBasicComponent implements OnInit {
    18. expandKeys = ['100', '1001'];
    19. value: string;
    20. nodes = [
    21. {
    22. title: 'parent 1',
    23. key: '100',
    24. children: [
    25. {
    26. title: 'parent 1-0',
    27. key: '1001',
    28. children: [
    29. { title: 'leaf 1-0-0', key: '10010', isLeaf: true },
    30. { title: 'leaf 1-0-1', key: '10011', isLeaf: true }
    31. ]
    32. },
    33. {
    34. title: 'parent 1-1',
    35. key: '1002',
    36. children: [{ title: 'leaf 1-1-0', key: '10020', isLeaf: true }]
    37. }
    38. ]
    39. }
    40. ];
    41. onChange($event: string): void {
    42. console.log($event);
    43. }
    44. ngOnInit(): void {
    45. // mock async
    46. setTimeout(() => {
    47. this.value = '1001';
    48. }, 1000);
    49. }
    50. }

    TreeSelect树选择 - 图2

    异步数据加载

    点击展开节点,动态加载数据,直到执行 addChildren() 方法取消加载状态。

    1. import { Component, OnInit } from '@angular/core';
    2. import { NzFormatEmitEvent } from 'ng-zorro-antd/core';
    3. @Component({
    4. selector: 'nz-demo-tree-select-async',
    5. template: `
    6. <nz-tree-select
    7. style="width: 250px"
    8. nzPlaceHolder="Please select"
    9. [nzDefaultExpandedKeys]="expandKeys"
    10. [nzDropdownMatchSelectWidth]="true"
    11. [nzDropdownStyle]="{ 'max-height': '300px' }"
    12. [(ngModel)]="value"
    13. [nzNodes]="nodes"
    14. [nzAsyncData]="true"
    15. (nzExpandChange)="onExpandChange($event)"
    16. >
    17. </nz-tree-select>
    18. `
    19. })
    20. export class NzDemoTreeSelectAsyncComponent implements OnInit {
    21. expandKeys = ['0-0'];
    22. value: string;
    23. nodes = [
    24. {
    25. title: 'Node1',
    26. value: '0-0',
    27. key: '0-0',
    28. children: [
    29. {
    30. title: 'Child Node1',
    31. value: '0-0-1',
    32. key: '0-0-1'
    33. },
    34. {
    35. title: 'Child Node2',
    36. value: '0-0-2',
    37. key: '0-0-2'
    38. }
    39. ]
    40. },
    41. {
    42. title: 'Node2',
    43. value: '0-1',
    44. key: '0-1'
    45. }
    46. ];
    47. onExpandChange(e: Required<NzFormatEmitEvent>): void {
    48. const node = e.node;
    49. if (node && node.getChildren().length === 0 && node.isExpanded) {
    50. this.loadNode().then(data => {
    51. node.addChildren(data);
    52. });
    53. }
    54. }
    55. loadNode(): Promise<any[]> {
    56. return new Promise(resolve => {
    57. setTimeout(
    58. () =>
    59. resolve([
    60. { title: 'Child Node', key: `${new Date().getTime()}-0` },
    61. { title: 'Child Node', key: `${new Date().getTime()}-1` }
    62. ]),
    63. 1000
    64. );
    65. });
    66. }
    67. ngOnInit(): void {}
    68. }

    TreeSelect树选择 - 图3

    自定义图标

    可以针对不同节点采用样式覆盖的方式定制图标。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-tree-select-customized-icon',
    4. template: `
    5. <nz-tree-select style="width: 250px" [nzNodes]="nodes" [(ngModel)]="value" nzPlaceHolder="Please select" nzShowIcon>
    6. </nz-tree-select>
    7. <br />
    8. <nz-tree-select
    9. style="width: 250px; margin-top: 20px;"
    10. [nzNodes]="nodes"
    11. [(ngModel)]="value"
    12. nzPlaceHolder="Please select"
    13. >
    14. <ng-template #nzTreeTemplate let-node>
    15. <span class="ant-tree-node-content-wrapper" [class.ant-tree-node-selected]="node.isSelected">
    16. <span> <i nz-icon [nzType]="node.isExpanded ? 'folder-open' : 'folder'"></i> {{ node.title }} </span>
    17. </span>
    18. </ng-template>
    19. </nz-tree-select>
    20. `
    21. })
    22. export class NzDemoTreeSelectCustomizedIconComponent {
    23. value: string;
    24. nodes = [
    25. {
    26. title: 'parent 1',
    27. key: '100',
    28. expanded: true,
    29. icon: 'anticon anticon-smile-o',
    30. children: [
    31. { title: 'leaf 1-0-0', key: '10010', icon: 'anticon anticon-meh-o', isLeaf: true },
    32. { title: 'leaf 1-0-1', key: '10011', icon: 'anticon anticon-frown-o', isLeaf: true }
    33. ]
    34. }
    35. ];
    36. }

    TreeSelect树选择 - 图4

    多选

    多选的树选择,例子中通过 nzMaxTagCount 限制最多显示3个选项。

    1. import { Component, OnInit } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-tree-select-multiple',
    4. template: `
    5. <nz-tree-select
    6. style="width: 250px"
    7. nzPlaceHolder="Please select"
    8. [nzMaxTagCount]="3"
    9. [nzMaxTagPlaceholder]="omittedPlaceHolder"
    10. [nzNodes]="nodes"
    11. [nzDefaultExpandAll]="true"
    12. [nzAllowClear]="false"
    13. [(ngModel)]="value"
    14. [nzMultiple]="true"
    15. (ngModelChange)="onChange($event)"
    16. >
    17. </nz-tree-select>
    18. <ng-template #omittedPlaceHolder let-omittedValues> and {{ omittedValues.length }} more... </ng-template>
    19. `
    20. })
    21. export class NzDemoTreeSelectMultipleComponent implements OnInit {
    22. value: string[] = [];
    23. nodes = [
    24. {
    25. title: 'parent 1',
    26. key: '100',
    27. children: [
    28. {
    29. title: 'parent 1-0',
    30. key: '1001',
    31. children: [
    32. { title: 'leaf 1-0-0', key: '10010', isLeaf: true },
    33. { title: 'leaf 1-0-1', key: '10011', isLeaf: true }
    34. ]
    35. },
    36. {
    37. title: 'parent 1-1',
    38. key: '1002',
    39. children: [{ title: 'leaf 1-1-0', key: '10020', isLeaf: true }]
    40. }
    41. ]
    42. }
    43. ];
    44. onChange($event: string[]): void {
    45. console.log($event);
    46. }
    47. ngOnInit(): void {}
    48. }

    TreeSelect树选择 - 图5

    可勾选

    使用勾选框实现多选功能。

    1. import { Component, OnInit } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-tree-select-checkable',
    4. template: `
    5. <nz-tree-select
    6. style="width: 250px"
    7. [nzNodes]="nodes"
    8. nzShowSearch
    9. nzCheckable
    10. nzPlaceHolder="Please select"
    11. [(ngModel)]="value"
    12. (ngModelChange)="onChange($event)"
    13. >
    14. </nz-tree-select>
    15. `
    16. })
    17. export class NzDemoTreeSelectCheckableComponent implements OnInit {
    18. value: string[] = ['0-0-0'];
    19. nodes = [
    20. {
    21. title: 'Node1',
    22. value: '0-0',
    23. key: '0-0',
    24. children: [
    25. {
    26. title: 'Child Node1',
    27. value: '0-0-0',
    28. key: '0-0-0',
    29. isLeaf: true
    30. }
    31. ]
    32. },
    33. {
    34. title: 'Node2',
    35. value: '0-1',
    36. key: '0-1',
    37. children: [
    38. {
    39. title: 'Child Node3',
    40. value: '0-1-0',
    41. key: '0-1-0',
    42. isLeaf: true
    43. },
    44. {
    45. title: 'Child Node4',
    46. value: '0-1-1',
    47. key: '0-1-1',
    48. isLeaf: true
    49. },
    50. {
    51. title: 'Child Node5',
    52. value: '0-1-2',
    53. key: '0-1-2',
    54. isLeaf: true
    55. }
    56. ]
    57. }
    58. ];
    59. onChange($event: string[]): void {
    60. console.log($event);
    61. }
    62. ngOnInit(): void {}
    63. }

    API

    nz-tree-selectcomponent

    参数说明类型默认值
    [nzAllowClear]显示清除按钮booleanfalse
    [nzPlaceHolder]选择框默认文字string-
    [nzDisabled]禁用选择器booleanfalse
    [nzShowIcon]是否展示 TreeNode title 前的图标,没有默认样式booleanfalse
    [nzShowSearch]显示搜索框booleanfalse
    [nzNotFoundContent]当下拉列表为空时显示的内容string-
    [nzDropdownMatchSelectWidth]下拉菜单和选择器同宽booleantrue
    [nzDropdownStyle]下拉菜单的样式{ [key: string]: string; }-
    [nzMultiple]支持多选(当设置 nzCheckable 时自动变为true)booleanfalse
    [nzHideUnMatched]搜索隐藏未匹配的节点booleanfalse
    [nzSize]选择框大小'large' | 'small' | 'default''default'
    [nzCheckable]节点前添加 Checkbox 复选框booleanfalse
    [nzShowExpand]节点前添加展开图标booleantrue
    [nzShowLine]是否展示连接线booleanfalse
    [nzAsyncData]是否异步加载(显示加载状态)booleanfalse
    [nzNodes]treeNodes 数据NzTreeNodeOptions[][]
    [nzDefaultExpandAll]默认展开所有树节点booleanfalse
    [nzExpandedKeys]默认展开指定的树节点string[]-
    [nzDisplayWith]如何在输入框显示所选的节点值的方法(node: NzTreeNode) => string(node: NzTreeNode) => node.title
    [nzMaxTagCount]最多显示多少个 tagnumber-
    [nzMaxTagPlaceholder]隐藏 tag 时显示的内容TemplateRef<{ $implicit: NzTreeNode[] }>-
    (nzExpandChange)点击展开树节点图标调用EventEmitter<NzFormatEmitEvent>-

    方法

    方法名说明返回值
    getTreeNodes获取组件 NzTreeNode 节点NzTreeNode[]
    getTreeNodeByKey按 key 获取 NzTreeNode 节点NzTreeNode
    getCheckedNodeList获取组件 checkBox 被点击选中的节点NzTreeNode[]
    getSelectedNodeList获取组件被选中的节点NzTreeNode[]
    getHalfCheckedNodeList获取组件半选状态节点NzTreeNode[]
    getExpandedNodeList获取组件展开状态节点NzTreeNode[]
    getMatchedNodeList获取组搜索匹配到的节点NzTreeNode[]