sup*_*ser 7 c# webassembly blazor
我需要在网络程序集中动态更新我的侧面导航栏。
你能建议我该怎么做吗?
@page "/ChildPage"
@code{
public List<string> menus = new List<string>();
NavMenu n = new NavMenu();
protected override async Task OnInitializedAsync()
{
menus.Add("Content 1");
menus.Add("Content 2");
await Task.Run(() => n.MenuItems = menus);
}
}
Run Code Online (Sandbox Code Playgroud)
在 Navmenu 剃须刀中做了如下一些操作。
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
@if (MenuItems != null)
{
@foreach (var menu in MenuItems)
{
<li class="nav-item px-3">
<NavLink class="nav-link" href="Page1">
<span class="oi oi-plus" aria-hidden="true"></span> @menu
</NavLink>
</li>
}
}
</ul>
</div>
@code {
private bool collapseNavMenu = true;
private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
public List<string> MenuItems = new List<string>() { "Page 1", "Page 2"};
}
Run Code Online (Sandbox Code Playgroud)
您能建议我如何更新每个页面的导航栏吗?
你可以像这样创建一个服务
public interface IMenuService
{
List<MenuItem> AdditionalMenuItems { get; set; }
event EventHandler<EventArgs> OnChanged;
void NotifyChanged();
}
Run Code Online (Sandbox Code Playgroud)
将其注册为作用域
services.AddScoped<IMenuService, MenuService>();
Run Code Online (Sandbox Code Playgroud)
您可以将其注入您的页面并添加
@inject IMenuService MenuService
protected override void OnInitialized()
{
MenuService.Add(whatever);
MenuService.NotifyChanged();
}
Run Code Online (Sandbox Code Playgroud)
在您的布局中
@implements IDisposable
@inject IMenuService MenuService
@foreach(MenuItem menuItem in MenuService.AdditionalMenuItems)
{
// Whatever
}
// code section
protected override void OnInitialized()
{
MenuService.OnChanged += MenuChanged;
}
void IDisposable.Dispose()
{
MenuService.OnChanged -= MenuChanged;
}
private void MenuChanged(EventArgs e)
{
InvokeAsync(StateHasChanged);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4910 次 |
| 最近记录: |