Вызывающий код на стороне клиента Blazor, который не является компонентом пользовательского интерфейса - PullRequest
0 голосов
/ 10 февраля 2020

Я видел на клиентской стороне Blazor, что мы можем вызвать компонент пользовательского интерфейса для рендеринга дополнительных элементов с общей страницы, также это можно сделать с помощью кода и файла razor.cs.

Но как это сделать? один вызов файла только с кодом, такого как строка MyFun c (), который может быть разделен между несколькими страницами пользовательского интерфейса, так что возвращаемая строка может обрабатываться по-разному на каждой странице?

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Вам даже не нужно использовать внедрение зависимостей, если вы не хотите / не нуждаетесь в этом.

Вы можете просто создать класс и сохранить его в памяти, как и любой другой тип кода 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();
}

Моя IndexPage может ссылаться на это. GalleryManager на протяжении всего времени жизни моего приложения.

И ребенок компоненты:

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

Вам не нужно делать это каскадным параметром, если вы этого не хотите, или даже размещать его на странице. Я только что показал вам пример сохранения класса загруженным в память.

Blazor - это просто C# код, и, поскольку я пришел с Windows фона формы, я чувствую себя как дома, поскольку элемент будет жить в памяти, пока я не покину страницу или не избавлюсь от нее.

0 голосов
/ 10 февраля 2020

Можно создать сервис - в основном, класс, а затем использовать встроенный 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

Затем вы можете использовать Service в своем блоке кода или где угодно, используя стандартный синтаксис Razor. Например -

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