Blazor-可以在后面的代码中使用NavigateTo吗?

时间:2019-12-13 22:00:22

标签: core blazor

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

谢谢!

2 个答案:

答案 0 :(得分:2)

此答案扩展了汉克·霍尔特曼(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();
        }
    }

ConfigureServicesStartup.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转换为服务,然后可以将其注入到任何组件中。

答案 1 :(得分:1)

  

是否可以在后面的代码中使用navigationmanager导航到?   我有一个全球帮手班

当您将此Helper类设为Scoped或Transient服务(即可注入)时,可以轻松使用构造函数注入,问题已解决。

private NavigationManager _navigationManager;

public MyHelperService(NavigationManager navigationManager)
{
    _navigationManager = navigationManager;
}

然后当然是在Startup.ConfigureServices()

services.AddTransient<MyHelperService>();

实际的导航应该可以正常工作。