blazor - 在 Blazor 中显示或隐藏侧边菜单
问题描述
我是 blazor 的初学者。
请告诉我如何使用按钮显示或隐藏 Blazor 标准模板的侧边菜单。
非常感谢 !
解决方案
最好是使用您自己的服务器,创建一个名为ViewOptionService.cs的新类。这将包含逻辑并作为单例服务工作。_navBarVisible 将保持导航栏是否隐藏的状态,而 Toggle 将更改状态, NavBarClass 将用于隐藏导航栏的 div:
public class ViewOptionService
{
private bool _navBarVisible = true;
public Action OnChanged { get; set; }
//Change state by click on the button
public void Toggle()
{
_navBarVisible = !_navBarVisible;//Change
if (OnChanged != null) OnChanged();//Callback for reload
}
//get additional css class for nav bar div
public string NavBarClass
{
get
{
if (_navBarVisible) return String.Empty;//No additional css class for show nav bar
return "d-none";//d-none class will hide the div
}
}
}
我们必须将 ViewOptionService 注册为服务,因此修改Program.cs中的Main:
public static async Task Main(string[] args)
{
//..
//Add next line to register
builder.Services.AddSingleton<ViewOptionService>();
await builder.Build().RunAsync();
}
现在我们可以将它作为服务注入并在MainLayout.razor中使用它来向 div 添加一个 css 类:
@inherits LayoutComponentBase
@inject ViewOptionService ViewOption
<div class="sidebar @ViewOption.NavBarClass">
<NavMenu />
</div>
我们还可以将其注入Index.razor(或其他地方)以添加按钮:
@page "/"
@inject ViewOptionService ViewOption
<button @onclick="ViewOption.Toggle">Hide Menu</button>
缺少最后一步,如果值发生变化,我们需要重新加载 MainLayout.razor,因此我们需要向 MainLayout 添加代码部分:
@code {
protected override async Task OnInitializedAsync()
{
ViewOption.OnChanged = () => {
StateHasChanged();//Refresh
};
}
}
=== 编辑 ===
我在https://github.com/DanielHWe/Hide-Blazor-NavBar-Sample下发布了完整代码
推荐阅读
- swift - SwiftUI Magnification gesture onUpdate doesn't fire immediately on device (works on simulator)
- c++ - 微控制器的第一次 gcc 链接器脚本编译但不运行
- git - 将 Rstudio 生成的数据自动保存到 git
- ios - 从 iOS 应用检测用户的 watchOS 版本
- google-dfp - Google Publisher Console 显示已损坏的广告位 + 警告
- mongodb - 大集合中按月分组的 MongoDB 聚合 - 优化管道
- java - 为什么这段代码调用私有方法?
- node.js - 如何正确更新 module.exports?
- cors - Haproxy CORS 请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - 在 Python 中调试 xml ElementTrees