如何在剃刀页面外的类中使用 NavigationManager?

Yor*_*n Y 3 blazor blazor-server-side blazor-client-side

我有一个单例类 Globals,我喜欢有一个静态方法来导航到我的应用程序中的其他页面。

public class Globals
{
    public static async void openBlazorPage( string pageName )
    {
        await Task.Run( () => { NavigationManager.NavigateTo( pageName ); } );
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法访问此类中的 NavigationManager。

  • 如何在剃刀页面之外的类中访问 NavigationManager?

Rah*_*hul 6

要访问 Razor 页面外部类后面的组件代码中的 NavigationManager,请使用 [Inject] 属性,如下所示 -

public class EmployeeEditBase : ComponentBase
    {
        [Inject]
        public NavigationManager NavigationManager { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

确保对组件使用代码隐藏方法。

要在任何服务内部使用,请使用构造函数注入。在您的情况下,您也可以使用构造函数注入。

public class Globals
{
private readonly NavigationManager _navMagager;
public Globals(NavigationManager navManager)
{
  _navMagager = navManager;
}

    public static async void openBlazorPage( string pageName )
    {
        await Task.Run( () => { _navMagager .NavigateTo( pageName ); } );
    }
}
Run Code Online (Sandbox Code Playgroud)

希望,它会帮助你。谢谢