关于 syncfusion-angular-menu
syncfusion-angular-menu 是面向 Angular 的 Syncfusion Menu 组件指南,涵盖导航菜单的实现、数据绑定和定制。它还介绍多级结构、事件、响应式汉堡菜单、国际化及状态持久化。
主要功能
- 01绑定层级或远程数据
- 02支持多级子菜单与模板
- 03动态增删及显隐菜单项
- 04配置事件、动画和方向
- 05提供汉堡模式、RTL 与本地化
适用场景
- 01构建应用顶部导航栏
- 02制作侧边栏或工具栏菜单
- 03实现移动端折叠导航
- 04创建动态上下文菜单
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ syncfusion/ angular-ui-components-skills --skill syncfusion-angular-menu安装后在 Claude Code 中输入/syncfusion-angular-menu确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-features.mdanimation-and-orientation.mdapi-reference.mddata-source-binding.mdevents-and-interactions.mdgetting-started.mdhamburger-and-responsive.mdinternationalization-and-persistence.mdmenu-items.mdstyling-and-appearance.mduse-cases-and-scenarios.md详细介绍
实现 Syncfusion Angular 菜单组件
菜单组件是一种图形用户界面,可用作应用或网站的导航栏。它支持多级嵌套菜单项、丰富的自定义选项、数据绑定、模板、动画、全面的事件处理、国际化、状态持久化,以及适合移动设备的汉堡菜单模式。
何时使用此技能
在以下情况下使用此技能:
- 创建导航菜单,并采用分层结构
- 绑定数据,数据源可以是数组或远程来源
- 动态自定义菜单项(添加、移除、启用、禁用)
- 处理菜单事件(点击、打开、关闭、选择)
- 应用动画并控制方向
- 为菜单项添加图标、图片和导航 URL
- 实现无障碍功能
- 设置菜单样式和主题
- 构建实际应用模式(侧边栏菜单、工具栏菜单、上下文菜单)
组件概述
主要功能:
- ✅ 分层数据绑定和自引用数据绑定
- ✅ HTML 模板和自定义项渲染
- ✅ 支持多级嵌套子菜单
- ✅ 多种动画效果(FadeIn、SlideDown、ZoomIn)
- ✅ 水平和垂直方向
- ✅ 支持图标和图片
- ✅ 动态启用/禁用、显示/隐藏菜单项
- ✅ 事件驱动的自定义选项
- ✅ RTL(从右到左)支持
- ✅ 无障碍功能(键盘导航、ARIA)
- ✅ CSS 自定义和主题设置
文档和导航指南
📖 核心文档(从这里开始)
1️⃣ 入门指南
📄 阅读: references/getting-started.md (新用户从这里开始)
- ✅ 安装和软件包设置
- ✅ 基本菜单实现
- ✅ CSS 导入和主题配置
- ✅ 基本属性(enablePersistence、enableRtl、cssClass、hoverDelay、enableScrolling、locale)
- ✅ 独立架构设置
- ✅ 首个应用示例
2️⃣ 数据源绑定和模板
📄 阅读: references/data-source-binding.md
- ✅ 使用字段映射进行分层数据绑定
- ✅ 自引用数据结构
- ✅ 使用 DataManager 进行远程数据绑定
- ✅ HTML 模板和自定义项渲染
- ✅ 动态填充数据
- ✅ FieldSettingsModel 配置
3️⃣ 菜单项自定义和动态管理
📄 阅读: references/menu-items.md (现已包含方法!)
- ✅ 菜单项属性(text、id、iconCss、url、separator)
- ✅ 菜单项中的图标和图片
- ✅ 导航 URL
- ✅ 自定义属性(htmlAttributes)
- ✅ **新增:**动态方法参考:
insertBefore()- 在目标项之前添加菜单项insertAfter()- 在目标项之后添加菜单项removeItems()- 删除菜单项enableItems()- 启用/禁用菜单项showItems()- 显示隐藏的菜单项hideItems()- 隐藏菜单项
- ✅ 启用/禁用菜单项
- ✅ 显示/隐藏菜单项
- ✅ 动态添加、移除和插入菜单项
- ✅ 用于对菜单项分组的分隔符
- ✅ 完整的动态菜单管理示例
4️⃣ 动画和方向
📄 阅读: references/animation-and-orientation.md
- ✅ 动画设置(效果、时长、缓动)
- ✅ 动画效果(FadeIn、SlideDown、ZoomIn、None)
- ✅ 水平和垂直方向
- ✅ 子菜单定位和行为
- ✅ 菜单点击打开与悬停打开行为
5️⃣ 事件与交互
📄 阅读: references/events-and-interactions.md (新增事件参数)
- ✅ 事件概览(记录了 7 个事件)
- ✅ 新增: 完整的事件参数文档:
BeforeOpenCloseMenuEventArgs- beforeOpen/beforeClose 事件OpenCloseMenuEventArgs- onOpen/onClose 事件MenuEventArgs- select/beforeItemRender 事件
- ✅ beforeOpen 和 beforeClose 事件(可取消)
- ✅ onOpen 和 onClose 事件
- ✅ Select 事件处理
- ✅ beforeItemRender 事件(用于工具提示和自定义渲染)
- ✅ 用于初始化的 Created 事件
- ✅ 通过事件动态修改菜单
🎯 高级功能与模式
6️⃣ 完整 API 参考
📄 阅读: references/api-reference.md (全面的 API 文档!)
- ✅ 所有 MenuModel 属性及示例(16 个属性)
- ✅ 所有 MenuItem 属性及示例(7 个属性)
- ✅ 动画设置配置
- ✅ 用于数据绑定的字段设置
- ✅ 所有菜单方法及签名和示例:
- insertBefore()、insertAfter()、removeItems()
- enableItems()、showItems()、hideItems()
- ✅ 所有菜单事件及参数
- ✅ 事件参数接口
- ✅ 枚举(Orientation、MenuEffect、MenuOpenType)
- ✅ 快速参考摘要
7️⃣ 汉堡模式与响应式设计
📄 阅读: references/hamburger-and-responsive.md (移动优先设计)
- ✅ 汉堡模式概览
- ✅ hamburgerMode 属性配置
- ✅ target 和 title 属性
- ✅ 基本汉堡菜单实现
- ✅ 响应式切换(桌面端/移动端)
- ✅ 带动画的汉堡菜单
- ✅ 完整的移动端菜单解决方案
- ✅ 汉堡菜单的状态持久化
- ✅ 无障碍最佳实践
- ✅ 适合触摸操作的交互
8️⃣ 国际化与状态管理
📄 阅读: references/internationalization-and-persistence.md (国际化 + 存储)
- ✅ 支持 15 种以上语言的本地化(i18n)
- ✅ RTL 语言支持(阿拉伯语、希伯来语、波斯语)
- ✅ 状态持久化(enablePersistence)
- ✅ HTML 清理(enableHtmlSanitizer)
- ✅ 悬停延迟控制(hoverDelay)
- ✅ 自定义 CSS 类(cssClass)
- ✅ 高级配置模式
- ✅ 完整的设置示例
9️⃣ 样式与外观
📄 阅读: references/styling-and-appearance.md
- ✅ CSS 样式和自定义类
- ✅ 圆角样式
- ✅ 标题和图标位置
- ✅ 主题自定义
- ✅ Material3 和其他主题集成
- ✅ CSS 变量自定义
🔟 高级功能与滚动
📄 阅读: references/advanced-features.md
- ✅ 从右到左(RTL)语言支持
- ✅ 水平和垂直滚动
- ✅ 大型菜单处理
- ✅ 使用分隔符对菜单项分组
- ✅ 无障碍功能(键盘导航、ARIA)
- ✅ 嵌套子菜单模式
1️⃣1️⃣ 用例与实际模式
📄 阅读: references/use-cases-and-scenarios.md
- ✅ 侧边栏菜单实现
- ✅ 工具栏菜单模式
- ✅ 上下文菜单场景
- ✅ ListView 和其他组件集成
- ✅ 多级菜单结构
- ✅ 移动端导航
- ✅ 管理后台模式
- ✅ 最佳实践和常见模式
🔍 按任务快速查找
我需要……
- ▶️ 安装并开始使用 → getting-started.md
- ▶️ 添加动态菜单项 → menu-items.md
- ▶️ 绑定数组/API 中的数据 → data-source-binding.md
- ▶️ 处理菜单点击和事件 → events-and-interactions.md
- ▶️ 添加动画 → animation-and-orientation.md
- ▶️ 创建适配移动设备的菜单 → hamburger-and-responsive.md
- ▶️ 支持多种语言 → internationalization-and-persistence.md
- ▶️ 查找所有属性/方法/事件 → api-reference.md
- ▶️ 设置样式和自定义外观 → styling-and-appearance.md
- ▶️ 构建生产环境模式 → use-cases-and-scenarios.md
快速入门示例
import { Component } from '@angular/core';
import { MenuModule } from '@syncfusion/ej2-angular-navigations';
import { MenuItemModel } from '@syncfusion/ej2-angular-navigations';
import { enableRipple } from '@syncfusion/ej2-base';
enableRipple(true);
@Component({
imports: [MenuModule],
standalone: true,
selector: 'app-root',
template: `<ejs-menu [items]="menuItems"></ejs-menu>`
})
export class AppComponent {
public menuItems: MenuItemModel[] = [
{
text: 'File',
items: [
{ text: 'Open' },
{ text: 'Save' },
{ separator: true },
{ text: 'Exit' }
]
},
{
text: 'Edit',
items: [
{ text: 'Cut' },
{ text: 'Copy' },
{ text: 'Paste' }
]
},
{ text: 'Help' }
];
}
CSS 设置:
@import '../node_modules/@syncfusion/ej2-base/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material3.css';
常见模式
1. 带图标的菜单
public menuItems: MenuItemModel[] = [
{
text: 'File',
iconCss: 'e-icons e-file',
items: [
{ text: 'Open', iconCss: 'e-icons e-open' },
{ text: 'Save', iconCss: 'e-icons e-save' }
]
}
];
2. 带动画的菜单
public animationSettings: MenuAnimationSettingsModel = {
effect: 'FadeIn',
duration: 800
};
在模板中使用:<ejs-menu [animationSettings]="animationSettings"></ejs-menu>
3. 带事件的菜单
public onItemSelect(args: MenuEventArgs): void {
console.log('Selected item:', args.item.text);
}
在模板中使用:<ejs-menu (select)="onItemSelect($event)"></ejs-menu>
4. 动态修改菜单
@ViewChild('menu')
public menuObj?: MenuComponent;
public addItem(): void {
const newItem: MenuItemModel[] = [
{ text: 'New Menu Item' }
];
this.menuObj?.insertAfter(newItem, 'File', false);
}
完整 API 参考
Menu 组件包含 16 个组件属性、7 个菜单项属性、7 个事件、3 个动画属性、6 个字段设置属性和 10+ 个方法。
完整文档请参阅 references/api-reference.md,其中包括:
- ✅ 所有 MenuModel 属性及示例
- ✅ 所有 MenuItem 属性及示例
- ✅ 所有方法(insertBefore、insertAfter、removeItems、enableItems、showItems、hideItems)
- ✅ 所有事件及其事件参数
- ✅ 枚举和快速参考
关键属性
基本属性(最常用)
| 属性 | 类型 | 用途 | 默认值 |
|---|---|---|---|
items | MenuItemModel[] | 要渲染的菜单项数组 | [] |
fields | FieldSettingsModel | 将数据源字段映射到菜单结构 | - |
template | string | 菜单项的自定义模板 | - |
animationSettings | MenuAnimationSettingsModel | 控制菜单动画行为 | - |
orientation | Orientation | 'Horizontal' 或 'Vertical' | 'Horizontal' |
showItemOnClick | boolean | 点击(true)或悬停(false)时打开子菜单 | false |
cssClass | string | 用于设置样式的自定义 CSS 类 | - |
enableRtl | boolean | 启用从右到左的布局 | false |
高级属性(适用于特殊情况)
| 属性 | 类型 | 用途 | 默认值 |
|---|---|---|---|
hamburgerMode | boolean | 启用移动端汉堡菜单 | false |
target | string | 汉堡菜单切换按钮选择器 | - |
title | string | 汉堡菜单抽屉的标题 | - |
enablePersistence | boolean | 将菜单状态保存到 localStorage | false |
enableScrolling | boolean | 为大型菜单启用滚动条 | false |
enableHtmlSanitizer | boolean | 清理 HTML 内容(安全) | true |
hoverDelay | number | 子菜单打开前的延迟(毫秒) | 0 |
locale | string | 本地化区域代码 | 'en-US' |
常见用例
- 应用程序菜单栏 - 包含子菜单的 File、Edit、View、Tools 菜单
- 导航侧边栏 - 用于页面导航的垂直菜单
- 工具栏菜单 - 带图标和命令的水平菜单
- 上下文菜单 - 包含动态菜单项的右键菜单
- 移动端导航 - 适用于响应式设计的可折叠菜单
- 管理后台 - 管理面板的多级导航
功能概览
✅ 数据绑定
- 层级菜单(父子结构)
- 自引用数据(id/parentId 关系)
- 通过 DataManager/HTTP 绑定远程数据
- 为菜单项自定义模板
✅ 自定义
- 动态添加/移除/插入菜单项
- 启用/禁用菜单项(显示为灰色)
- 通过编程方式显示/隐藏菜单项
- 自定义 HTML 属性和内容
- 支持图标和图像
- 导航 URL
✅ 交互
- 7 个事件(beforeOpen、beforeClose、onOpen、onClose、select、beforeItemRender、created)
- 可取消事件,用于控制流程
- 支持键盘快捷键
- 助记符 UI
✅ 样式与主题
- 6 种以上内置主题(Material3、Bootstrap5、Fluent2 等)
- 自定义 CSS 类
- 支持圆角
- 自定义图标/标题
- 支持深色模式
✅ 响应式与移动设备
- 移动设备汉堡菜单模式
- 支持 RTL 语言(15 种以上区域设置)
- 水平和垂直布局
- 便于触控的交互
- 汉堡菜单动画
✅ 性能与状态
- 将状态持久化到 localStorage
- 控制悬停延迟
- 通过 HTML 清理保障安全
- 高效渲染大型菜单
后续步骤:
- 从 getting-started.md 开始,了解安装方法
- 根据任务选择参考文档(参见上文“按任务快速访问”)
- 参阅 api-reference.md 了解完整的 API 详情