不是 UI 组件的 Blazor 客户端调用代码



我在 Blazor 客户端看到,我们可以调用 UI 组件来呈现共享页面中的其他元素,这也可以使用代码隐藏和 razor.cs 文件来完成。

但是如何调用可以在多个UI页面之间共享的纯代码文件,例如字符串MyFunc((,以便每个页面可以对返回的字符串进行不同的处理?

如果你不想要/不需要它,你甚至不必使用依赖注入。

您可以创建一个类并将其保存在内存中,就像任何其他类型的 CSharp 代码一样。

可选,但如果要使类可用于其他组件,在我的示例项目 BlazorImageGallery 中,我创建了一个名为 GalleryManager 的对象,我希望将其作为级联参数提供给其他组件:

public class GalleryManager
{
}
<CascadingValue Value="GalleryManager">
<ArtistListViewer></ArtistListViewer>
<ImageListViewer></ImageListViewer>
</CascadingValue>

然后在我的索引页面上,我加载库管理器:

protected override async Task OnInitializedAsync()
{
// Create the GalleryManager
this.GalleryManager = new GalleryManager(this);
// Load the Artists
this.GalleryManager.Artists = await ArtistService.GetArtistList();
}

我的索引页可以参考这个。库管理器贯穿我的应用程序生命周期。

和子组件:

/// <summary>
/// This parameter is available to call parent objects
/// </summary>
[CascadingParameter]
GalleryManager GalleryManager { get; set; }

如果您不想,则不必将其设置为级联参数,甚至不必将其放在页面上。我只是向您展示了一个在内存中加载类的示例。

Blazor 只是 C# 代码,由于我来自 Windows 窗体背景,因此感觉就像在家一样,因为该项将驻留在内存中,直到我退出页面或释放它。

可以创建一个服务 - 基本上是一个类,然后使用内置的 DI 将其注入到任何组件中。

例如-

public class SayHelloService()
{
public string SayHello()
{
return "Hello!";
}
}

然后像这样准备 DI -

public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);

builder.Services.AddSingleton<SayHelloService>();
builder.RootComponents.Add<App>("app");
await builder.Build().RunAsync();
}

然后像这样注入到您的组件中

@inject SayHelloService Service

然后,您可以使用标准 Razor 语法在代码块或任何位置使用 Service。 例如-

<p>@(Service.SayHello())</p>

相关内容

  • 没有找到相关文章

最新更新