@inject IJSRuntime JsRuntime
@implements IAsyncDisposable
@code {
[Parameter]
public string Text { get; set; } = string.Empty;
[Parameter]
public EventCallback TextChanged { get; set; }
private bool isTextSeted = false;
[JSInvokable("MyMethod")]
public void HandleEditorBlur(string data)
{
Text = data;
TextChanged.InvokeAsync(data);
StateHasChanged(); // Ensure UI updates
}
protected override async Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(Text) && !isTextSeted)
{
try
{
await JsRuntime.InvokeVoidAsync("window.setData", Text);
isTextSeted = true;
}
catch (Exception e)
{
}
}
await base.OnParametersSetAsync();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
var lDotNetReference = DotNetObjectReference.Create(this);
await JsRuntime.InvokeVoidAsync("GLOBAL.SetDotnetReference", lDotNetReference);
await JsRuntime.InvokeVoidAsync("window.lunchEditor", Text);
await base.OnAfterRenderAsync(firstRender);
}
public void Dispose()
{
JsRuntime.InvokeVoidAsync("window.destroyEditor", Text);
}
public async ValueTask DisposeAsync()
{
await JsRuntime.InvokeVoidAsync("window.destroyEditor", Text);
}
}