首页 > 解决方案 > Blazor - 可以在代码后面 NavigateTo 吗?

问题描述

是否可以在后面的代码中使用导航管理器导航到?我有一个全局帮助程序类,如果全局函数失败,我需要将其重定向到特定页面。这可能吗?如果您能够在 NavagationManager 上的代码后面创建一个实例,我不太明白。或者如果这是可能的,我应该使用依赖注入来调用 naigationmanager 吗?

谢谢!

标签: coreblazor

解决方案


这个答案扩展了 Henk Holterman 的优秀答案,但包含一个完整的例子,因为服务一开始让我感到困惑,我希望将来发现这个的人有一个完整的例子。

这是我的Index.razor页面

@page "/"

<TypeScriptTest.Components.MyComponent></TypeScriptTest.Components.MyComponent>

这是我的 MyComponent.razor:

<button @onclick="Test">
    Test
</button>

MyComponent.razor.cs:(这也可以在 MyComponent.razor 的 @Code 块中,但在顶部使用 @inject HelperService)

 public partial class MyComponent
    {
        [Inject] HelperService HelperService { get; set; }

        public void Test()
        {
            HelperService.ChangePage();
        }
    }

ConfigureServices里面Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSingleton<WeatherForecastService>();
        services.AddTransient<HelperService>();
    }

最后,HelperService.cs

public class HelperService
{
    private NavigationManager _navigationManager;
    public HelperService(NavigationManager navigationManager)
    {
        _navigationManager = navigationManager;
    }

    public void ChangePage()
    {
        _navigationManager.NavigateTo("/test");
    }
}

使用这种方法,您可以注入NavigationManager到 Helper 的构造函数中,然后将 Helper 变成一个服务,然后您可以将其注入到任何组件中。


推荐阅读