36 lines
1.1 KiB
C#
36 lines
1.1 KiB
C#
|
using Microsoft.JSInterop;
|
||
|
|
||
|
namespace BlueWest.Razor.Library;
|
||
|
|
||
|
// This class provides an example of how JavaScript functionality can be wrapped
|
||
|
// in a .NET class for easy consumption. The associated JavaScript module is
|
||
|
// loaded on demand when first needed.
|
||
|
//
|
||
|
// This class can be registered as scoped DI service and then injected into Blazor
|
||
|
// components for use.
|
||
|
|
||
|
public class ExampleJsInterop : IAsyncDisposable
|
||
|
{
|
||
|
private readonly Lazy<Task<IJSObjectReference>> moduleTask;
|
||
|
|
||
|
public ExampleJsInterop(IJSRuntime jsRuntime)
|
||
|
{
|
||
|
moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
|
||
|
"import", "./_content/BlueWest.Razor.Library/exampleJsInterop.js").AsTask());
|
||
|
}
|
||
|
|
||
|
public async ValueTask<string> Prompt(string message)
|
||
|
{
|
||
|
var module = await moduleTask.Value;
|
||
|
return await module.InvokeAsync<string>("showPrompt", message);
|
||
|
}
|
||
|
|
||
|
public async ValueTask DisposeAsync()
|
||
|
{
|
||
|
if (moduleTask.IsValueCreated)
|
||
|
{
|
||
|
var module = await moduleTask.Value;
|
||
|
await module.DisposeAsync();
|
||
|
}
|
||
|
}
|
||
|
}
|