问题概述
当 API 调用完成且数据可用时,需要触发主 .RAZOR 页面的刷新。挑战在于找到一个“触发器”来指示数据已准备好并相应地启动页面刷新。
解决方案
1. 实现作用域服务 (AppState)
创建一个作用域服务 (AppState) 来管理返回的数据集,并使其可访问应用程序中的所有组件。
2. 显示组件 (SearchResults.razor)
在 SearchResults.razor 中,在页面加载时从 AppState 服务获取数据并在循环中显示它。当 API 返回数据时,使用 if 语句有条件地显示数据或加载微调器。
3. 集成子筛选组件
当用户从子组件应用筛选器时,在每个组件中使用以下代码:
<code class="language-csharp">string href = "/searchresults" + // 其他参数在此处 ... NavigationManager.NavigateTo(href);</code>
这将在应用筛选器时始终重定向到 SearchResults.razor。
4. 利用状态/通知模式
实现状态/通知模式来广播 AppState 服务中的更改。这可以通过在子组件中使用以下方法来实现:
<code class="language-csharp">// FilterRazorComponent01.razor 中的示例 //... public async Task OnSomeEventAsync() { // 模拟一些 API 调用并触发数据更新 await Task.Delay(3000); AppState.NotifyListChanged(AppState.Records, EventArgs.Empty); NavigationManager.NavigateTo(NavigationManager.Uri); }</code>
5. 注册通知事件
在 SearchResults.razor 中,注册 AppState 的 ListChanged 事件,并在触发事件时调用 StateHasChanged 以触发刷新。
<code class="language-csharp">this.AppState.ListChanged += this.OnListChanged; //... private void OnListChanged(object sender, EventArgs e) => this.InvokeAsync(this.StateHasChanged);</code>
6. 处理子事件上的页面刷新
当子组件触发更新 AppState 的事件时,ListChanged 事件将被广播,SearchResults.razor 通过触发 StateHasChanged 来刷新页面以响应。这确保主页面根据筛选器组件中的更改更新其显示。
以上是如何在 API 调用后从子组件刷新 .RAZOR 主页面?的详细内容。更多信息请关注PHP中文网其他相关文章!