【发布时间】:2021-11-21 17:13:06
【问题描述】:
我正在 Blazor 中构建动态下拉导航栏。现在的问题是,当分页发生时,导航栏组件会重新加载并且下拉菜单会消失(这不是我想要的)。
我知道这是真的,因为当我将 navigationManager.NavigateTo(route); 排除在等式之外时,它会按预期工作。
我的主布局:
<div style="height: 100%; width: 100%; display: flex;">
<div style="height: 100%; width: 170px">
<NavigationMenu></NavigationMenu>
</div>
<div class="flex-child-expand">
@Body
</div>
</div>
NavigationMenu.razor
<div>
@foreach (var navButton in NavManager.MainNavButtons)
{
<div class="dropdown">
<button class="@navButton.StyleClassString" @onclick="@(() => OnButtonClicked(navButton, navButton.ButtonRoute))">@navButton.ButtonString</button>
<div class="dropdown-content">
@foreach (var button in navButton.SubSection)
{
<button class="@button.StyleClassString" @onclick="@(() => OnButtonClicked(navButton, button.ButtonRoute, button.ButtonString))">@button.ButtonString</button>
}
</div>
</div>
}
</div>
private void OnButtonClicked(NavManager.NavButton mainButtonPressed, string route, string buttonString = "")
{
if(buttonString == "")
{
foreach (var mainbtn in NavManager.MainNavButtons)
{
if (mainbtn.Section == mainButtonPressed.Section)
{
mainbtn.StyleClassString = ButtonActiveStyle.active;
}
else
{
mainbtn.StyleClassString = ButtonActiveStyle.normal;
}
//cleanup
foreach (var subButton in mainbtn.SubSection)
{
subButton.StyleClassString = ButtonActiveStyle.normal;
}
}
if(mainButtonPressed.SubSection.Count > 0)
{
mainButtonPressed.SubSection[0].StyleClassString = ButtonActiveStyle.active;
}
}
else
{
foreach (var mainbtn in NavManager.MainNavButtons)
{
if (mainbtn.Section == mainButtonPressed.Section)
{
mainbtn.StyleClassString = ButtonActiveStyle.active;
}
else
{
mainbtn.StyleClassString = ButtonActiveStyle.normal;
}
foreach (var subButton in mainbtn.SubSection)
{
if (subButton.ButtonString == buttonString)
{
subButton.StyleClassString = ButtonActiveStyle.active;
}
else
{
subButton.StyleClassString = ButtonActiveStyle.normal;
}
}
}
}
GoToPage(route);
}
private void GoToPage(string route)
{
navigationManager.NavigateTo(route);
}
*抱歉缩进不好。
那么有没有办法让 NavigationMenu.razor 组件在我调用 navigationManager.NavigateTo(route); 时不呈现或重新加载它的状态?
【问题讨论】:
-
这就是导航的本质——加载一个页面,这涉及到重置它的变量。如果你想在导航中保持状态,你需要一些方法来保存那个状态。一种方法是使用范围服务。