PanelMenu 是手风琴-树组件的混合体。
import { PanelMenu } from 'primereact/panelmenu';
PanelMenu 需要一个菜单项集合作为其模型。
<PanelMenu model={items} className="w-full md:w-20rem" />
默认情况下,只有一个根菜单项可以处于活动状态,启用 multiple 属性以能够打开多个项。
<PanelMenu model={items} className="w-full md:w-20rem" />
如果菜单项定义了 key,则可以使用 expandedKeys 属性以编程方式控制 PanelMenu 状态,该属性定义了展开的键。 此属性是 Map 实例,其键是节点的键,值是布尔值。
<div className="card flex flex-column align-items-center gap-3">
<Button type="button" label="Toggle All" text onClick={() => toggleAll()} />
<PanelMenu model={items} expandedKeys={expandedKeys} onExpandedKeysChange={setExpandedKeys} className="w-full md:w-20rem" multiple />
</div>
PanelMenu 提供项目自定义功能,使用接收项目实例并返回元素的 items template 属性。
<PanelMenu model={items} className="w-full md:w-20rem" />
command 属性定义了当通过单击或按键事件激活项目时要运行的回调。
<PanelMenu model={items} className="w-full md:w-20rem" />
<Toast ref={toast} />
带有导航的项目使用 command 和 url 属性定义,以便能够使用路由器链接组件、外部链接或编程导航。
<PanelMenu model={items} className="w-full md:w-20rem" />
手风琴标题元素具有 button 角色,一个使用菜单项模型的 label 属性定义的 aria-label 和 aria-controls 来定义内容部分的 id,以及 aria-expanded用于可见性状态。
手风琴面板的内容使用 region 角色,定义一个与标题的 aria-controls 匹配的 id 和一个引用标题 id 的 aria-labelledby。
树元素具有 tree 作为角色,每个菜单项都具有 treeitem 角色以及 aria-label、aria-selected 和 aria-expanded 属性。 树节点的容器元素具有 group 角色。 aria-setsize、aria-posinset 和 aria-level 属性是隐式计算的,并添加到每个 treeitem 中。
键 | 功能 |
---|---|
tab | 当焦点移动到组件时,将焦点添加到第一个标题,如果已经有一个处于焦点的标签标题,则基于页面标签序列将焦点移出组件。 |
enter | 切换内容的可见性。 |
space | 切换内容的可见性。 |
向下箭头 | 如果面板折叠,则将焦点移动到下一个标题,否则面板的第一个树节点接收焦点。 |
向上箭头 | 如果上一个面板折叠,则将焦点移动到上一个标题,否则上一个面板的最后一个树节点接收焦点。 |
home | 将焦点移动到第一个标题。 |
end | 将焦点移动到最后一个标题。 |
键 | 功能 |
---|---|
tab | 将焦点移动到页面标签顺序中的下一个可聚焦元素。 |
shift + tab | 将焦点移动到页面标签顺序中的上一个可聚焦元素。 |
enter | 激活处于焦点的树节点。 |
space | 激活处于焦点的树节点。 |
向下箭头 | 将焦点移动到下一个树节点。 |
向上箭头 | 将焦点移动到上一个树节点。 |
右箭头 | 如果节点已关闭,则打开节点,否则将焦点移动到第一个子节点。 |
左箭头 | 如果节点已打开,则关闭节点,否则将焦点移动到父节点。 |