在 OpenHarmony(ArkUI,eTS/ArkTS) 中,“菜单动态加载”通常指 菜单项不是写死的,而是根据数据动态生成(如从接口、配置、权限获取)。下面按常见场景给你几种做法。
Menu + ForEach 动态生成菜单这是最常用、推荐的方式。
@Entry
@Component
struct DynamicMenuExample {
@State menuItems: string[] = ['新建', '编辑', '删除']
build() {
Column() {
Button('点击显示菜单')
.onClick((event: ClickEvent) => {
// 动态修改菜单数据
this.menuItems = ['刷新', '设置', '关于']
// 显示菜单
this.showMenu(event)
})
}
}
private showMenu(event: ClickEvent) {
Menu.show({
x: event.x,
y: event.y,
menus: this.menuItems.map(item => ({
value: item,
action: () => {
console.info('选中:' + item)
}
}))
})
}
}
✅ 特点
menuItems 控制@State menuItems: Array<{ label: string, action: () => void }> = []
aboutToAppear() {
// 模拟接口
setTimeout(() => {
this.menuItems = [
{ label: '用户管理', action: () => {} },
{ label: '系统设置', action: () => {} }
]
}, 1000)
}
build() {
Button('菜单')
.onClick((e) => {
Menu.show({
x: e.x,
y: e.y,
menus: this.menuItems.map(i => ({
value: i.label,
action: i.action
}))
})
})
}
适用于列表项、图片等。
List() {
ForEach(this.listData, (item) => {
ListItem() {
Text(item)
}
.onLongPress((e) => {
Menu.show({
x: e.x,
y: e.y,
menus: this.getMenuByItem(item)
})
})
})
}
getMenuByItem(item: string) {
return [
{ value: '详情', action: () => {} },
{ value: '删除', action: () => {} }
]
}
getMenu(role: string) {
if (role === 'admin') {
return ['用户管理', '日志', '设置']
}
return ['查看', '退出']
}
Menu.show 是一次性弹出
数据要先准备好
aboutToAppear 或点击前完成加载API 版本
Menu.show 在 OpenHarmony 3.2+ 稳定支持| 场景 | 推荐方式 |
|---|---|
| 简单动态菜单 | Menu + ForEach |
| 接口加载 | @State + 异步赋值 |
| 列表操作 | onLongPress |
| 权限菜单 | 数据过滤 |
如果你能说明:
我可以给你更精确的示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。