Dropdown下拉菜单

    当页面上的操作命令过多时,用此组件可以收纳操作元素。点击或移入触点,会出现一个下拉菜单。可在列表中进行选择,并执行相应的命令。

    基本

    最简单的下拉菜单。

    1. @Component({
    2. selector: 'nz-demo-dropdown-basic',
    3. template: `
    4. <a nz-dropdown [nzDropdownMenu]="menu">
    5. Hover me
    6. <i nz-icon nzType="down"></i>
    7. </a>
    8. <nz-dropdown-menu #menu="nzDropdownMenu">
    9. <ul nz-menu nzSelectable>
    10. <li nz-menu-item>1st menu item</li>
    11. <li nz-menu-item>2nd menu item</li>
    12. <li nz-menu-item>3rd menu item</li>
    13. </ul>
    14. </nz-dropdown-menu>
    15. `
    16. })
    17. export class NzDemoDropdownBasicComponent {}

    Dropdown下拉菜单 - 图4

    其他元素

    分割线和不可用菜单项。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-dropdown-item',
    4. template: `
    5. <a nz-dropdown [nzDropdownMenu]="menu">
    6. Hover me
    7. <i nz-icon nzType="down"></i>
    8. </a>
    9. <nz-dropdown-menu #menu="nzDropdownMenu">
    10. <ul nz-menu>
    11. <li nz-menu-item>1st menu item</li>
    12. <li nz-menu-item>2nd menu item</li>
    13. <li nz-menu-divider></li>
    14. <li nz-menu-item nzDisabled>3rd menu item(disabled)</li>
    15. </ul>
    16. </nz-dropdown-menu>
    17. `
    18. })
    19. export class NzDemoDropdownItemComponent {}

    触发事件

    点击菜单项后会触发事件,用户可以自由添加各种事件进行不同的操作。

    多级菜单

    传入的菜单里有多个层级。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-dropdown-sub-menu',
    4. template: `
    5. <a nz-dropdown [nzDropdownMenu]="menu" (nzVisibleChange)="change($event)">
    6. Cascading menu
    7. <i nz-icon nzType="down"></i>
    8. </a>
    9. <nz-dropdown-menu #menu="nzDropdownMenu">
    10. <ul nz-menu>
    11. <li nz-menu-item>1st menu item</li>
    12. <li nz-menu-item>2nd menu item</li>
    13. <li nz-submenu nzTitle="sub menu">
    14. <ul>
    15. <li nz-menu-item>3rd menu item</li>
    16. <li nz-menu-item>4th menu item</li>
    17. </ul>
    18. </li>
    19. <li nz-submenu nzDisabled nzTitle="disabled sub menu">
    20. <ul>
    21. <li nz-menu-item>3rd menu item</li>
    22. <li nz-menu-item>4th menu item</li>
    23. </ul>
    24. </li>
    25. </ul>
    26. </nz-dropdown-menu>
    27. `
    28. })
    29. export class NzDemoDropdownSubMenuComponent {
    30. change(value: boolean): void {
    31. console.log(value);
    32. }
    33. }

    Dropdown下拉菜单 - 图7

    右键菜单

    在区域内任意右击触发。

    1. import { NzContextMenuService, NzDropdownMenuComponent } from 'ng-zorro-antd/dropdown';
    2. @Component({
    3. selector: 'nz-demo-dropdown-context-menu',
    4. template: `
    5. <div class="context-area" (contextmenu)="contextMenu($event, menu)">
    6. Right Click on here
    7. </div>
    8. <nz-dropdown-menu #menu="nzDropdownMenu">
    9. <ul nz-menu>
    10. <li nz-menu-item>1st menu item</li>
    11. <li nz-menu-item>2nd menu item</li>
    12. <li nz-menu-item nzDisabled>disabled menu item</li>
    13. <li nz-submenu nzTitle="sub menu">
    14. <ul>
    15. <li nz-menu-item>4th menu item</li>
    16. </ul>
    17. </li>
    18. <li nz-submenu nzDisabled nzTitle="disabled sub menu">
    19. <ul>
    20. <li nz-menu-item>3rd menu item</li>
    21. <li nz-menu-item>4th menu item</li>
    22. </ul>
    23. </li>
    24. </ul>
    25. </nz-dropdown-menu>
    26. `,
    27. styles: [
    28. `
    29. .context-area {
    30. background: #f7f7f7;
    31. color: #777;
    32. text-align: center;
    33. height: 200px;
    34. line-height: 200px;
    35. }
    36. `
    37. ]
    38. })
    39. export class NzDemoDropdownContextMenuComponent {
    40. contextMenu($event: MouseEvent, menu: NzDropdownMenuComponent): void {
    41. this.nzContextMenuService.create($event, menu);
    42. }
    43. closeMenu(): void {
    44. this.nzContextMenuService.close();
    45. }
    46. constructor(private nzContextMenuService: NzContextMenuService) {}
    47. }

    弹出位置

    支持 6 个弹出位置。

    Dropdown下拉菜单 - 图9

    触发方式

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-dropdown-trigger',
    4. template: `
    5. <a nz-dropdown nzTrigger="click" [nzDropdownMenu]="menu">
    6. Click me
    7. <i nz-icon nzType="down"></i>
    8. </a>
    9. <nz-dropdown-menu #menu="nzDropdownMenu">
    10. <ul nz-menu>
    11. <li nz-menu-item>1st menu item</li>
    12. <li nz-menu-item>2nd menu item</li>
    13. <li nz-menu-divider></li>
    14. <li nz-menu-item nzDisabled>disabled menu item</li>
    15. <li nz-submenu nzTitle="sub menu">
    16. <ul>
    17. <li nz-menu-item>3rd menu item</li>
    18. <li nz-menu-item>4th menu item</li>
    19. </ul>
    20. </li>
    21. <li nz-submenu nzDisabled nzTitle="disabled sub menu">
    22. <ul>
    23. <li nz-menu-item>3rd menu item</li>
    24. <li nz-menu-item>4th menu item</li>
    25. </ul>
    26. </li>
    27. </ul>
    28. `
    29. })
    30. export class NzDemoDropdownTriggerComponent {}

    带下拉框的按钮

    左边是按钮,右边是额外的相关功能菜单。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-dropdown-dropdown-button',
    4. template: `
    5. <nz-button-group>
    6. <button nz-button (click)="log()">DropDown</button>
    7. <button nz-button nz-dropdown [nzDropdownMenu]="menu1" nzPlacement="bottomRight">
    8. <i nz-icon nzType="ellipsis"></i>
    9. </button>
    10. </nz-button-group>
    11. <nz-button-group>
    12. <button nz-button (click)="log()">DropDown</button>
    13. <button nz-button nz-dropdown [nzDropdownMenu]="menu2" nzPlacement="bottomRight">
    14. <i nz-icon nzType="user"></i>
    15. </button>
    16. </nz-button-group>
    17. <nz-button-group>
    18. <button nz-button disabled>DropDown</button>
    19. <button nz-button disabled nz-dropdown [nzDropdownMenu]="menu3" nzPlacement="bottomRight">
    20. <i nz-icon nzType="ellipsis"></i>
    21. </nz-button-group>
    22. <button nz-button nz-dropdown [nzDropdownMenu]="menu4">
    23. Button
    24. <i nz-icon nzType="down"></i>
    25. </button>
    26. <nz-dropdown-menu #menu1="nzDropdownMenu">
    27. <ul nz-menu>
    28. <li nz-menu-item>menu1 1st menu item</li>
    29. <li nz-menu-item>menu1 2nd menu item</li>
    30. <li nz-menu-item>menu1 3rd menu item</li>
    31. </ul>
    32. </nz-dropdown-menu>
    33. <nz-dropdown-menu #menu2="nzDropdownMenu">
    34. <ul nz-menu>
    35. <li nz-menu-item>menu2 1st menu item</li>
    36. <li nz-menu-item>menu2 2nd menu item</li>
    37. <li nz-menu-item>menu2 3rd menu item</li>
    38. </ul>
    39. </nz-dropdown-menu>
    40. <nz-dropdown-menu #menu3="nzDropdownMenu">
    41. <ul nz-menu>
    42. <li nz-menu-item>menu3 1st menu item</li>
    43. <li nz-menu-item>menu3 2nd menu item</li>
    44. <li nz-menu-item>menu3 3rd menu item</li>
    45. </ul>
    46. </nz-dropdown-menu>
    47. <nz-dropdown-menu #menu4="nzDropdownMenu">
    48. <ul nz-menu>
    49. <li nz-menu-item>menu4 1st menu item</li>
    50. <li nz-menu-item>menu4 2nd menu item</li>
    51. <li nz-menu-item>menu4 3rd menu item</li>
    52. </ul>
    53. </nz-dropdown-menu>
    54. `,
    55. styles: [
    56. `
    57. nz-button-group {
    58. margin: 0 8px 8px 0;
    59. }
    60. `
    61. ]
    62. })
    63. export class NzDemoDropdownDropdownButtonComponent {
    64. log(): void {
    65. console.log('click dropdown button');
    66. }
    67. }

    Dropdown下拉菜单 - 图11

    菜单隐藏方式

    默认是点击关闭菜单,可以关闭此功能。

    菜单使用 nz-menu,还包括菜单项 [nz-menu-item],分割线 [nz-menu-divider]

    用于包裹菜单项,可以通过 nzDropdownMenu 模板变量导出后传入 [nz-dropdown]NzContextMenuService

    注意:每个 nz-dropdown-menu 只能作为一个 [nz-dropdown] 的输入项

    1. <a nz-dropdown [nzDropdownMenu]="menu">Hover me</a>
    2. <nz-dropdown-menu #menu="nzDropdownMenu">
    3. <ul nz-menu>
    4. <li nz-menu-item>1st menu item</li>
    5. <li nz-menu-item>2nd menu item</li>
    6. <li nz-menu-item>3rd menu item</li>
    7. </ul>
    方法/属性说明参数返回
    create创建右键菜单($event:MouseEvent | {x:number, y:number}, menu:NzDropdownMenuComponent)-
    close关闭右键菜单--