只有在首次创建组件或页面时才调用OnInitialized。
我正在Blazor服务器端应用程序上工作,并且有一个绑定动态菜单的头。还有一个类别页面,我在其中显示基于查询字符串的数据,该字符串已经绑定在标题菜单中。
一旦我选择菜单,就会调用OnInitializedAsync方法,并且类别页面代表查询字符串值显示数据,但我再次打开菜单并选择不同的产品,则不会调用类别页面。
标题菜单代码下方。
页眉.剃刀(这在主布局页面上注册(
<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);
}
}
}
产品.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);
}
}
}
呈现相同组件的新url将使用该实例。您需要OnParametersSetAsync。