菜单

菜单是一个导航/命令组件,支持动态和静态定位。


import { Menu } from 'primereact/menu';
         

菜单需要一个菜单项集合作为其模型


<Menu model={items} />
 

<Toast ref={toast} />
<Menu model={items} />
 

通过添加 popup 属性并使用目标事件调用 toggle 方法来启用弹出模式。 popupAlignment 属性允许您控制覆盖层如何与其目标对齐。


<Toast ref={toast}></Toast>
<Menu model={items} popup ref={menuLeft} id="popup_menu_left" />
<Button label="Show Left" icon="pi pi-align-left" className="mr-2" onClick={(event) => menuLeft.current.toggle(event)} aria-controls="popup_menu_left" aria-haspopup />
<Menu model={items} popup ref={menuRight} id="popup_menu_right" popupAlignment="right" />
<Button label="Show Right" icon="pi pi-align-right" className="mr-2" onClick={(event) => menuRight.current.toggle(event)} aria-controls="popup_menu_right" aria-haspopup />
 

可以使用 template 属性将自定义内容放置在菜单项内。


<Menu model={items} className="w-full md:w-15rem"  />
 

当通过单击或按键事件激活项目时,command 属性定义要运行的回调。


<Menu model={items} />
<Toast ref={toast} />
 

具有导航功能的项目使用 commandurl 属性定义,以便能够使用路由器链接组件、外部链接或编程导航。


<Menu model={items} />
 

屏幕阅读器

菜单组件使用 menu 角色,并且用于描述菜单的值可以使用 aria-labelledbyaria-label 属性提供。 每个列表项都有一个 presentation 角色,而锚元素具有一个 menuitem 角色,其中 aria-label 指的是项目的标签,如果项目被禁用,则定义 aria-disabled。 菜单内的子菜单使用 group 角色,并定义一个 aria-labelledby 作为子菜单根菜单项标签的 ID。

在弹出模式下,组件隐式管理目标元素的 aria-expandedaria-haspopuparia-controls 属性,以定义目标和弹出窗口之间的关系。

键盘支持

功能
tab如果焦点进入菜单,则将焦点添加到第一个项目。 如果焦点已在菜单内,则焦点将移动到页面 tab 序列中的下一个可聚焦项目。
shift + tab如果焦点进入菜单,则将焦点添加到最后一个项目。 如果焦点已在菜单内,则焦点将移动到页面 tab 序列中的上一个可聚焦项目。
enter激活聚焦的菜单项。 如果菜单处于覆盖模式,则弹出窗口将关闭,焦点将移动到目标。
space激活聚焦的菜单项。 如果菜单处于覆盖模式,则弹出窗口将关闭,焦点将移动到目标。
escape如果菜单处于覆盖模式,则弹出窗口将关闭,焦点将移动到目标。
向下箭头将焦点移动到下一个菜单项。
向上箭头将焦点移动到上一个菜单项。
home将焦点移动到第一个菜单项。
end将焦点移动到最后一个菜单项。