在 Blazor 中,我們經常會遇到需要根據巢狀子元件中觸發的事件或操作(例如 API 呼叫完成)動態更新主頁面佈局或刷新內容的情況。
考慮以下場景:
為了實現上述解決方案,我們利用以下技術:
我們使用作用域服務(例如 AppState)來儲存和共享檢索到的 API 數據,以便根頁面及其子元件都能存取。
我們定義一個可重複使用的 Loading.razor 元件,在頁面載入時顯示微調器,資料準備就緒時顯示內容。
我們建立一個視圖服務(例如 WeatherForecastViewService),它管理資料並公開一個 ListChanged 事件,當基礎資料變更時觸發該事件。
在子元件中,我們注入視圖服務並監控其 ListChanged 事件。偵測到變更後,我們使用 StateHasChanged 來刷新元件並顯示更新後的資料。
在主 SearchResults.razor 頁面中,我們:
<code class="language-csharp">@code { [Inject] WeatherForecastViewService viewService { get; set; } // API 调用完成后赋值为 true public bool IsLoaded { get; set; } protected override async Task OnInitializedAsync() { await GetForecastsAsync(); this.viewService.ListChanged += this.OnListChanged; } private async Task GetForecastsAsync() { // 代码省略,为简洁起见 } private void OnListChanged(object sender, EventArgs e) => this.InvokeAsync(this.StateHasChanged); public void Dispose() { this.viewService.ListChanged -= this.OnListChanged; } }</code>
<code class="language-csharp">@if (this.IsLoaded) { @this.ChildContent } else { // 显示加载微调器 }</code>
透過實作這些技術,我們建立了子元件和主頁面之間的通訊通道,使我們能夠觸發 UI 更新並在父子關係中保持一致的資料狀態。
以上是如何在 API 呼叫後從子元件刷新 Blazor 主 Razor 頁面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!