Blazor - Get Started with Smart.RepeatButton
Setup The Project
Follow the Getting Started guide to set up your Blazor Application with Smart UI.
Setup Basic RepeatButton
Smart.RepeatButton is a button element that repeats a single action until release.
- Add the RepeatButton component to the Pages/Index.razor file
<RepeatButton></RepeatButton>
Delayindicates the time in miliseconds between the execution of each action, whileInitialDelayapplies delay only on the very first Click event:<RepeatButton Delay="100">Repeat Button</RepeatButton>
- Optionally, set the name and value of the RepeatButton:
<RepeatButton Delay="100" Name="repeat" Value="enabled">Repeat Button</RepeatButton>
RepeatButton Event
In order to atach a change listener to the RepeatButton, it is necessary to use the IJSRuntime interface
@inject IJSRuntime JS
Create an Increase function that will increment a number by one every time it is called:
public static int number = 1;
[JSInvokable]
public void Increase()
{
number++;
StateHasChanged();
}
Using JSInterop, inoke a custom JS function called "setListener":
protected override void OnInitialized()
{
base.OnInitialized();
JS.InvokeVoidAsync("setListener", DotNetObjectReference.Create(this), nameof(Increase));
}
Inside the \_Host.cshtml file (server-side Blazor) or wwwroot/index.html (client-side WebAssembly Blazor), create a function that will attach an event listener to the DOM element and will then call our C# function:
<script>
(function (global) {
global.setListener = (dotNetHelper) => {
setTimeout(function(){
document.querySelector("smart-repeat-button").addEventListener('click', function(){
dotNetHelper.invokeMethodAsync('Increase')
})
}, 0)
}
})(window);
</script>
The demo below will increase the counter, while the user is pressing the RepeatButton:
<RepeatButton Delay="100" id="increase-btn">+</RepeatButton>
<h3>@number</h3>
@code{
public static int number = 1;
[JSInvokable]
public void Increase()
{
number++;
StateHasChanged();
}
protected override void OnInitialized()
{
base.OnInitialized();
JS.InvokeVoidAsync("setListener", DotNetObjectReference.Create(this), nameof(Increase));
}
}