sidebar-nav 主菜单

NG-ALAIN 左边主菜单,依赖于 @delon/theme

组件的数据来自 MenuService(其结构为 Menu), MenuService 的操作会自动同步至该组件。

常见问题

为什么会有两个快捷菜单

快捷菜单生成规则统一在 0 索引下查找,并按以下顺序来获取:

  1. 【推荐】 children 存在 shortcutRoot: true 则最优先

  2. 否则查找带有【dashboard】字样链接,若存在则在此菜单的下方创建快捷入口

  3. 否则放在0节点位置

因此,建议在菜单数据的 0 索引下保持一个有效的 shortcutRoot: true 数据。

常见问题

隐藏主菜单项

表示永远不显示菜单,可以在菜单设置 hide: true

隐藏自动生成导航隐藏面包屑

表示不显示该节点,可以在菜单设置 hideInBreadcrumb: true

关于层级

虽然支持无限层级,但为了用户体验请保持最多不超过四层(含组别)。

如何更新某个菜单项

当调用 MenuService.setItem(key, newValue) 时会自动重新渲染主菜单,其中 key 必须是存在值,请参考 Menu 的定义。

  1. import { SidebarNavModule } from '@delon/abc/sidebar-nav';

代码演示

sidebar-nav 主菜单 - 图1

基础样例

最简单的用法。

  1. import { Component } from '@angular/core';
  2. import { Menu, MenuService, SettingsService } from '@delon/theme';
  3. import { NzIconService } from 'ng-zorro-antd/icon';
  4. @Component({
  5. selector: 'components-sidebar-nav-basic',
  6. template: `
  7. <nz-switch [ngModel]="collapsed" (ngModelChange)="toggleCollapsed()"></nz-switch>
  8. <sidebar-nav class="d-block mt-md"></sidebar-nav>
  9. `,
  10. host: {
  11. '[class.d-block]': 'true',
  12. '[class.alain-default__collapsed]': 'collapsed',
  13. '[style.width.px]': 'collapsed ? 64 : 200',
  14. },
  15. })
  16. export class ComponentsSidebarNavBasicComponent {
  17. menus: Menu[] = [
  18. {
  19. text: 'Heading',
  20. group: true,
  21. children: [
  22. {
  23. text: 'Dashboard <strong>HTML</strong>',
  24. // Support icon by https://ng.ant.design/components/icon/zh
  25. // Format: `anticon-{icon key}`
  26. icon: 'anticon-dashboard',
  27. badge: 5,
  28. },
  29. {
  30. text: 'Iconfont',
  31. // Support for iconfont
  32. icon: { type: 'iconfont', iconfont: 'icon-twitter' },
  33. },
  34. {
  35. text: 'Custom Class Name',
  36. // Support for custom class
  37. icon: {
  38. type: 'class',
  39. value: 'newClassName',
  40. },
  41. children: [{ text: 'Child' }, { text: 'Child' }],
  42. },
  43. {
  44. text: 'Level1',
  45. // Support for custom images
  46. icon: {
  47. type: 'img',
  48. value: './assets/img/avatar.jpg',
  49. },
  50. children: [
  51. {
  52. text: 'Level2',
  53. icon: { type: 'iconfont', iconfont: 'icon-twitter' },
  54. children: [
  55. { text: 'Level3A', icon: { type: 'iconfont', iconfont: 'icon-twitter' } },
  56. { text: 'Level3B-DISABLED', disabled: true },
  57. ],
  58. },
  59. { text: 'Level2-DISABLED', disabled: true },
  60. ],
  61. },
  62. ],
  63. },
  64. ];
  65. constructor(menuSrv: MenuService, public settingsSrv: SettingsService, iconService: NzIconService) {
  66. menuSrv.add(this.menus);
  67. iconService.fetchFromIconfont({
  68. scriptUrl: 'https://at.alicdn.com/t/font_8d5l8fzk5b87iudi.js',
  69. });
  70. }
  71. get collapsed() {
  72. return this.settingsSrv.layout.collapsed;
  73. }
  74. toggleCollapsed() {
  75. this.settingsSrv.setLayout('collapsed', !this.collapsed);
  76. }
  77. }

API

sidebar-nav

成员说明类型默认值
[disabledAcl]acl 校验失败时以 disabled 状态显示booleanfalse
[autoCloseUnderPad]小于Pad宽度时路由切换后自动关闭侧边栏booleantrue
[recursivePath]自动向上递归查找,菜单数据源包含 /ware,则 /ware/1 也视为 /warebooleantrue
[openStrictly]展开完全受控,不再自动关闭已展开的项booleanfalse
[maxLevelIcon]Icon最多显示到第几层number3
(select)点击菜单时回调(包含 disabledEventEmitter<Menu>-