我一直在使用Blazor WebAssembly示例作为新应用程序的基础,并且运行良好。但我希望使NavMenu更动态。
在这种情况下,我想在NavMenu中有特定于管理员/主持人的选项,我要在用户登录后尝试添加这些选项。我目前正在使用NavigationManager.NavigateTo(page,false)在Razor页面之间进行切换。它实际上实际上是一个Razor页面,因此,登录名和动态表位于同一页面上,具体取决于应用程序是否具有令牌。
我使用false选项来确保它不会刷新整个页面,否则令牌将丢失。我现在发现奇怪的是,如果单击NavBar,它将更新NavBar,显示新的管理选项,这很好。但是我希望使用NavigationManager.NavigateTo(page,false)在代码中执行相同的操作,也可以使导航栏更新。
我一直在看一些有关Blazor以及如何使用组件的视频和教程,但是我仍然发现它使如何在组件之间调用以及获取外部/父组件进行更新感到困惑。
我可以想到不同的方法使它工作,但我希望弄清楚实现它的正确方法是什么,并遵循代码约定。我怀疑即使我一直在研究这样的东西,我也缺少一些基本的方法来做这样的事情。
我添加的代码
<li class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="oi oi-list-rich" aria-hidden="true"></span> Noter
</NavLink>
</li>
@if (ApiService.Token.HasValue)
{
<li class="nav-item px-3">
<NavLink class="nav-link" href="logout">
<span class="oi oi-list-rich" aria-hidden="true"></span> AdminStuff
</NavLink>
</li>
}
<li class="nav-item px-3">
<NavLink class="nav-link" href="logout">
<span class="oi oi-list-rich" aria-hidden="true"></span> Log ud
</NavLink>
</li>
答案 0 :(得分:1)
将AuthorizeView
与基于角色或策略的授权一起使用
答案 1 :(得分:0)
我找到了一种方法,但是我怀疑这不是最好或最合适的方法。
我这样创建了一个静态EventManager:
public static class EventManager
{
public static List<Action> renderActions = new List<Action>();
public static void AddRenderAction(Action renderAction)
{
renderActions.Add(renderAction);
}
public static void TriggerRenderActions()
{
renderActions.ForEach(a => a.Invoke());
}
}
,然后在NavMenu.razor组件的OnInitialized方法中添加固有的“ StateHasChanged”方法:
protected override void OnInitialized()
{
EventManager.AddRenderAction(()=>StateHasChanged());
}
这样,我可以从任何地方调用EventManager.TriggerRenderActions()来运行所有添加的动作。