Angular 导航菜单组件 | ng-hub-ui-nav

Angular 导航组件,支持下拉菜单、逐级深入面板、响应式折叠、Router 集成和 CSS 变量主题。

API 参考

这里是 nav 的完整契约:你可以绑定、监听、投影和设置主题的一切,都集中在一处。接入你需要的部分,自定义你想要的样式——它是 standalone 的,且对 signal 友好。

输入

通过 4 个输入项精细调校 nav。像绑定任意 Angular @Input 一样绑定它们。

名称类型默认值描述
items必填HubNavItem[]要渲染的导航项数组。每一项定义其类型(link、dropdown、header、separator、custom)、label、route、icon、badge、children 等。
configPartial<HubNavConfig>{}与全局默认值合并的部分配置覆盖。控制方向、下拉触发方式、折叠模式、断点、位置等。
navClassstring''应用于 nav 容器元素的额外 CSS 类。
itemTemplateTemplateRef<HubNavItemTemplateContext> | nullnull通过输入绑定渲染导航项的可选自定义模板。hubNavItemTemplate 指令的优先级高于此输入。

输出

响应 nav 的行为——有 5 个事件可供你挂接逻辑。

名称类型描述
itemClickOutputEmitterRef<HubNavItem>当 link 项被点击时触发。提供被点击的 HubNavItem。
dropdownOpenOutputEmitterRef<HubNavItem>当 dropdown 项被打开时触发。
dropdownCloseOutputEmitterRef<HubNavItem>当 dropdown 项被关闭时触发。
mobileToggleOutputEmitterRef<boolean>当移动端面板被切换时触发。打开时提供 true,关闭时提供 false。
panelChangeOutputEmitterRef<HubNavPanelEvent>当面板被打开、关闭、下钻或返回导航时触发。提供该项、面板索引和操作类型。

模板

打造你自己的样式——3 个模板插槽让你可以投影自定义标记。

名称描述示例
hubNavStart在 start 插槽中投影自定义内容。水平方向:视觉起始处(LTR 中为左侧,RTL 中为右侧)。垂直方向:主列的顶部。<hub-nav [items]="items"> <ng-template hubNavStart let-collapsed="collapsed"> <img src="logo.svg" alt="Brand" /> @if (!collapsed) { <span>App Name</span> } </ng-template> </hub-nav>
hubNavEnd在 end 插槽中投影自定义内容。水平方向:视觉结束处(LTR 中为右侧,RTL 中为左侧)。垂直方向:主列的底部。<hub-nav [items]="items"> <ng-template hubNavEnd> <button type="button">Sign out</button> </ng-template> </hub-nav>
hubNavItemTemplate使用自定义模板覆盖默认的项渲染。接收 HubNavItemTemplateContext,其包含 $implicit(item)、active、expanded 和 depth 属性。<hub-nav [items]="items"> <ng-template hubNavItemTemplate let-item let-active="active"> <span [class.fw-bold]="active">{{ item.label }}</span> @if (item.badge) { <span class="badge">{{ item.badge }}</span> } </ng-template> </hub-nav>

CSS 变量

用 42 个 CSS 变量为每一个像素设置主题。在 :root 处覆盖它们,或将其限定到某个容器范围内。

布局

控制 nav 的整体尺寸、内边距和间距。

变量默认值类型描述
--hub-nav-height3.5remlength 导航栏的高度。 3rem4remauto
--hub-nav-padding-x1remlength nav 容器的水平内边距。 0.5rem1.5rem2rem
--hub-nav-padding-y0.5remlength nav 容器的垂直内边距。 0.25rem0.75rem1rem
--hub-nav-gap0.25remlength nav 项之间的间隙。 00.5rem1rem

颜色与背景

控制 nav 的配色方案和边框。

变量默认值类型描述
--hub-nav-bg#fffcolor 导航栏的背景颜色。 #f8f9fatransparentvar(--hub-sys-surface-page)
--hub-nav-color#212529color 导航的基础文本颜色。 #333#fffvar(--hub-sys-text-primary)
--hub-nav-border-color#dee2e6color 导航栏的边框颜色。 transparent#cccvar(--hub-sys-border-color-default)

Items

各种状态下单个导航项的样式。

变量默认值类型描述
--hub-nav-item-padding-x1remlength nav 项内部的水平内边距。 0.5rem1.25rem1.5rem
--hub-nav-item-padding-y0.5remlength nav 项内部的垂直内边距。 0.25rem0.75rem1rem
--hub-nav-item-color#212529color nav 项的文本颜色。 #495057#fffinherit
--hub-nav-item-border-radius0.25remlength nav 项的边框半径。 00.375rem50rem
--hub-nav-item-hover-bgrgba(0, 0, 0, 0.04)color 悬停时的背景颜色。 #e9ecefrgba(255, 255, 255, 0.1)transparent
--hub-nav-item-hover-color#0d6efdcolor 悬停时的文本颜色。 #0a58ca#fffvar(--hub-sys-color-primary)
--hub-nav-item-active-bg#0d6efdcolor 项处于激活状态时的背景颜色。 #0a58catransparentvar(--hub-sys-color-primary)
--hub-nav-item-active-color#fffcolor 项处于激活状态时的文本颜色。 #0d6efd#212529var(--hub-sys-text-inverse)
--hub-nav-item-disabled-color#6c757dcolor 禁用项的文本颜色。 #adb5bdvar(--hub-sys-text-muted)
--hub-nav-item-disabled-opacity0.65number 禁用项的不透明度。 0.50.41

Dropdown

自定义下拉面板的外观和定位。

变量默认值类型描述
--hub-nav-dropdown-bg#fffcolor 下拉面板的背景颜色。 #f8f9fa#343a40var(--hub-sys-surface-elevated)
--hub-nav-dropdown-border-color#dee2e6color 下拉面板的边框颜色。 transparent#ccc
--hub-nav-dropdown-border-radius0.375remlength 下拉面板的边框半径。 00.25rem0.5rem
--hub-nav-dropdown-shadow0 0.5rem 1rem rgba(0, 0, 0, 0.15)shadow 下拉面板的阴影。 none0 4px 8px rgba(0,0,0,0.1)0 1rem 3rem rgba(0,0,0,0.175)
--hub-nav-dropdown-min-width12remlength 下拉面板的最小宽度。 10rem15rem200px

Brand

品牌插槽区域的样式。

变量默认值类型描述
--hub-nav-brand-font-size1.25remlength 品牌文本的字号。 1rem1.5rem2rem
--hub-nav-brand-font-weight600number 品牌文本的字重。 400700800
--hub-nav-brand-color#212529color 品牌的文本颜色。 #fff#0d6efdinherit

移动端面板

响应式移动端导航面板的配置。

变量默认值类型描述
--hub-nav-mobile-bg#fffcolor 移动端面板的背景颜色。 #f8f9fa#212529var(--hub-sys-surface-page)
--hub-nav-mobile-width18remlength offcanvas 移动端面板的宽度。 15rem20rem80vw
--hub-nav-mobile-backdrop-bgrgba(0, 0, 0, 0.5)color 移动端面板后方的背景遮罩颜色。 rgba(0, 0, 0, 0.3)rgba(0, 0, 0, 0.75)transparent
--hub-nav-mobile-transition300ms easetransition 移动端面板开关动画的过渡时序。 200ms ease-in-out400ms ease150ms linear

Accordion 与图标

垂直 accordion 的缩进和图标尺寸。

变量默认值类型描述
--hub-nav-accordion-indent1remlength 垂直 accordion 模式下每个嵌套层级的左侧缩进。 0.5rem1.5rem2rem
--hub-nav-icon-size1.25remlength 导航项图标的尺寸。 1rem1.5rem2rem
--hub-nav-icon-gap0.5remlength 图标与标签文本之间的间隙。 0.25rem0.75rem1rem

Panel

堆叠面板逐级下钻导航的样式。

变量默认值类型描述
--hub-nav-panel-width16remlength 每个面板的默认宽度。 14rem18rem20rem
--hub-nav-panel-zindex100number 面板的堆叠顺序(应低于 dropdown 的 z-index)。 50100200
--hub-nav-panel-bgvar(--hub-sys-surface-page, #fff)color 面板的背景颜色。 #f8f9fa#fffvar(--hub-sys-surface-elevated)
--hub-nav-panel-colorvar(--hub-sys-text-primary, #212529)color 面板内部的文本颜色。 #333#fffinherit
--hub-nav-panel-border-colorvar(--hub-sys-border-color-default, #dee2e6)color 面板之间的边框颜色。 transparent#ccc
--hub-nav-panel-shadowinset 4px 0 8px -4px rgba(0, 0, 0, 0.1)shadow 面板的阴影。 none2px 0 4px rgba(0,0,0,0.05)
--hub-nav-panel-header-height3remlength 面板头部的高度。 2.5rem3.5rem4rem
--hub-nav-panel-header-bgvar(--hub-sys-surface-elevated, #f8f9fa)color 面板头部的背景颜色。 #fff#e9eceftransparent
--hub-nav-panel-back-colorvar(--hub-sys-text-secondary, #6c757d)color 面板头部返回按钮的颜色。 #212529#0d6efdinherit
--hub-nav-panel-back-hover-bgrgba(0, 0, 0, 0.04)color 面板头部按钮的悬停背景。 #e9ecefrgba(0,0,0,0.08)

样式与主题

尚未记录任何样式示例。本节将包含自定义方案和主题示例。