Blazor导航管理器返回了吗? [英] Blazor Navigation Manager Go Back?
本文介绍了Blazor导航管理器返回了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用Blazor时,我希望能够返回到以前的页面(&Q;)。
我发现了这个issue,看起来像是死胡同?
此功能非常基本,我不敢相信它不存在。
是否可以四处走走以使此功能(&Q;)返回(&Q;)?
请注意,我不能使用window.goBack
或history.goBack
,因为我的应用不会创建任何历史记录,也不应该创建任何历史记录。
创建历史记录的唯一方法是使用Navigation.NavigateTo
的forceLoad
选项,但如果我这样做,它将尝试再次加载我的整个应用,这很慢,我不想这样做。
推荐答案
您需要的是页面历史记录状态管理器:
对于下面的示例,我使用的是Blazor Wasm,但您也可以在Blazor Server中使用此示例。
在我添加的客户端应用程序中添加了这个类: PageHistory oryState:
public class PageHistoryState { private List<string> previousPages; public PageHistoryState() { previousPages = new List<string>(); } public void AddPageToHistory(string pageName) { previousPages.Add(pageName); } public string GetGoBackPage() { if (previousPages.Count > 1) { // You add a page on initialization, so you need to return the 2nd from the last return previousPages.ElementAt(previousPages.Count - 2); } // Can't go back because you didn't navigate enough return previousPages.FirstOrDefault(); } public bool CanGoBack() { return previousPages.Count > 1; } }
然后将此类作为单个实例添加到服务:
builder.Services.AddSingleton<PageHistoryState>();
将其注入您的页面:
@inject WasmBlazor.Client.PageHistoryState PageHistoryState
在我的标记中,我已检查是否可以返回页面:
@if (PageHistoryState.CanGoBack()) { <a href="@PageHistoryState.GetGoBackPage()">Go Back</a> }
并且我已覆盖OnInitialized()
protected override void OnInitialized() { PageHistoryState.AddPageToHistory("/counter"); base.OnInitialized(); }
我在"获取数据&q;"页中执行了相同的操作,并且无需JSInterop即可返回。
这篇关于Blazor导航管理器返回了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文