我正在使用Blazor服务器端应用程序,并且具有用于绑定动态菜单的标题。还有一个类别页面,在该页面上,我根据已经绑定在标题菜单中的查询字符串显示数据。
一旦我选择菜单,并且类别页面显示代表查询字符串值的数据,就会调用OnInitializedAsync方法,但是我再次打开菜单并选择其他产品,则不会调用类别页面。
标题菜单代码下方。
Header.razor(在主布局页面上注册)
<ul class="cat_menu">
@if (categoryDtos == null)
{
<div>Loading...</div>
}
else
{
@foreach (var category in categoryDtos)
{
<li><a href="category/@category.Id">@category.Name<i class="fas fa-chevron-right"></i></a></li>
}
}
</ul>
public class HeaderBase : ComponentBase
{
[Inject] public IToastService toastService { get; set; }
[Inject] ICategoryService categoryService { get; set; }
public List<CategoryDto> categoryDtos { get; set; }
protected async override Task OnInitializedAsync()
{
var categoryLIst = await categoryService.GetCategories();
if (categoryLIst.Data != null)
{
categoryDtos = categoryLIst.Data.ToList();
toastService.ShowSuccess("Fetch successfully");
}
else
{
toastService.ShowError(categoryLIst.Message);
}
}
}
Product.razor页面
@page "/category/{categoryID}"
<ul class="sidebar_categories">
@if (categoryTypeDtos == null)
{
<div>Loading...</div>
}
else
{
@foreach (var category in categoryTypeDtos)
{
<li><a href="#">@category.Name</a></li>
}
}
</ul>
public class CategoryBase : ComponentBase
{
[Inject] public IToastService toastService { get; set; }
[Parameter] public string categoryID { get; set; }
[Inject] ICategoryService categoryService { get; set; }
public List<CategoryTypeDto> categoryTypeDtos { get; set; }
protected async override Task OnInitializedAsync()
{
var response = await categoryService.GetCategoryTypeByID(Guid.Parse(categoryID));
if (response.Data != null)
{
categoryTypeDtos = response.Data.ToList();
toastService.ShowSuccess("Fetch successfully");
}
else
{
toastService.ShowError(response.Message);
}
}
}
答案 0 :(得分:1)
OnInitialized仅在首次创建组件或页面时调用。
呈现相同组件的新url将使用实例。您需要改为OnParametersSetAsync。