【问题标题】:Show or Hide Side Menu in Blazor在 Blazor 中显示或隐藏侧边菜单
【发布时间】:2021-10-30 10:25:25
【问题描述】:

我是 blazor 的初学者。

请告诉我如何使用按钮显示或隐藏 Blazor 标准模板的侧边菜单。

非常感谢!

【问题讨论】:

    标签: blazor


    【解决方案1】:

    最好使用您自己的服务器,创建一个名为 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注册为Service,所以修改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下发了完整代码

    【讨论】:

    • 我不能让这个例子工作,我不知道为什么......
    • 是不工作还是不编译?有任何错误信息吗?
    • 现在一切正常!现在我认为它对我不起作用,因为我有一个 WebAssembly Blazor 项目,其中包括 3 个项目:客户端、服务器和共享...我将再次尝试将您的代码实施到我的项目中,但我之前说过,我不能从第一次做...非常感谢您和最诚挚的问候!
    • 在这种情况下,如果您将我的帖子标记为答案会很好
    猜你喜欢
    • 1970-01-01
    • 2023-02-16
    • 2017-07-13
    • 1970-01-01
    • 2018-01-24
    • 2017-04-08
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多