Blazor导航管理器返回了吗? [英] Blazor Navigation Manager Go Back?

查看:16
本文介绍了Blazor导航管理器返回了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Blazor时,我希望能够返回到以前的页面(&Q;)。

我发现了这个issue,看起来像是死胡同?

此功能非常基本,我不敢相信它不存在。

是否可以四处走走以使此功能(&Q;)返回(&Q;)?

请注意,我不能使用window.goBackhistory.goBack,因为我的应用不会创建任何历史记录,也不应该创建任何历史记录。

创建历史记录的唯一方法是使用Navigation.NavigateToforceLoad选项,但如果我这样做,它将尝试再次加载我的整个应用,这很慢,我不想这样做。

推荐答案

您需要的是页面历史记录状态管理器:

对于下面的示例,我使用的是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆