如何在MudNavMenu中实现同一时间仅展开一个MudNavGroup
MudNavMenu 暂无内置的同时间仅展开一个分组的配置属性,不管是静态写死还是动态生成的导航结构,都可以通过受控状态绑定的方式实现需求,无需修改组件内部逻辑。
实现逻辑
- 为每个
MudNavGroup分配全局唯一标识(比如分组ID、唯一编码、路由前缀均可) - 在组件内声明一个状态变量,存储当前处于展开状态的分组标识
- 为每个
MudNavGroup绑定Expanded属性与ExpandedChanged事件:展开某一分组时,将状态变量更新为当前分组的标识,其余分组会因标识不匹配自动进入折叠状态;点击已展开的分组时将状态变量置空,即可实现手动折叠效果。
代码示例
首先定义导航数据结构(适配动态生成场景):
// 导航分组模型 public class NavGroup { public string Id { get; set; } = string.Empty; // 分组唯一标识 public string Title { get; set; } = string.Empty; public string? Icon { get; set; } public List<NavLink> Links { get; set; } = []; } // 导航链接模型 public class NavLink { public string Title { get; set; } = string.Empty; public string Href { get; set; } = string.Empty; }
组件内实现逻辑:
<MudNavMenu> @foreach (var group in _navGroups) { <MudNavGroup Title="@group.Title" Icon="@group.Icon" Expanded="@(_currentExpandedGroupId == group.Id)" ExpandedChanged="(isExpanded) => { _currentExpandedGroupId = isExpanded ? group.Id : null; }"> @foreach (var link in group.Links) { <MudNavLink Href="@link.Href" Match="NavLinkMatch.Prefix"> @link.Title </MudNavLink> } </MudNavGroup> } </MudNavMenu> @code { // 存储当前展开的分组ID,赋值为对应分组ID可实现默认展开,null为默认全折叠 private string? _currentExpandedGroupId = null; // 动态生成的导航数据源,可从接口、配置文件读取 private List<NavGroup> _navGroups = []; protected override void OnInitialized() { // 初始化导航数据逻辑,示例省略 // _navGroups = 从接口/配置加载的分组数据 } }
扩展说明
如果需要实现路由匹配自动展开对应分组,可在
OnInitialized生命周期中获取当前页面地址,匹配到所属分组的ID后赋值给_currentExpandedGroupId即可,和现有逻辑完全兼容。
内容的提问来源于stack exchange,提问作者Mbongo
相关产品推荐
相关产品推荐

