@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) { await JsRuntime.InvokeVoidAsync("window.setData", Text); isTextSeted = true; } 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); } }