@implements IDisposable; @inject ISearchService searchService @inject IJSRuntime jsRuntime @code { private string test = "Q"; protected override void OnInitialized() { searchService.Subscribe(OnUpdate); } protected override async Task OnInitializedAsync() { await searchService.Load(); await jsRuntime.InvokeVoidAsync("SetDotnetReference", DotNetObjectReference.Create(this)); } void IDisposable.Dispose() { searchService.Unsubscribe(OnUpdate); } void OnUpdate() { StateHasChanged(); } [JSInvokable("OnKeyPress")] public async Task OnKeyPress(string code, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey) { if (code.ToLower().Equals("k") && (ctrlKey || shiftKey || altKey || metaKey)) { if (searchService.IsVisible) { searchService.Hide(); } else { searchService.Show(); } } } }