Events in Blazor
Привіт!
Подивимось, як можна передати дані з одного компонента в інший. Для початку я створю дві кнопки, при натисканні яких будуть передаватись дані в інший компонент.
Button
Я створю компонент з назвою ThumbButton, який буде містити дві кнопки. В залежності, яка кнопка натиснута, буде викликатись відповідний метод і передавати дані в parrent-компонент. В @onclick вказується, який метод буде викликатись при настискані кнопки.
Для того, щоб передати дані в parrent-компонент, використовується властивість типу EventCallback<Thumb>, де Thumb — це enum. Замість enum може бути будь-який інший тип даних. У метод ThumbUp i ThumbDown викликаю OnVote.InvokeAsync, в який передається відповідний enum. Цей виклик передає дані в parrent-компонент.
<button class="btn btn-primary mx-2" @onclick="ThumbUp">
<span class="oi oi-thumb-up"></span>
</button>
<button class="btn btn-danger mx-2" @onclick="ThumbDown">
<span class="oi oi-thumb-down"></span>
</button>
@code {
public EventCallback<Thumb> OnVote { get; set; }
private void ThumbUp()
{
OnVote.InvokeAsync(Thumb.Up);
}
private void ThumbDown()
{
OnVote.InvokeAsync(Thumb.Down);
}
public enum Thumb
{
Up,
Down
}
}
Тепер цей компонент можна перевикористати на будь-якій сторінці.
Button Component on page
Тепер візьмемо сторінку Counter. І додамо щойно створений компонент з кнопкою. Розпочнемо з коду. Я створю дві властивості isThumbUp i isThumbDown типу bool. В залежності від того, яка властивість набуде значення true, відповідні дані будуть відображатись. Також якщо одна з цих властивостей набуде значення true, кнопка зникне.
Для того, щоб отримати дані з компонента кнопки, потрібен хендлер, який буде міняти значення isThumbUp i isThumbDown у відповідь на натискання кнопки <ThumbButton OnVote="OnVotedHandler"></ThumbButton>. Метод хендлер має приймати на вхід параметер типу який передається з кнопки. . В залежності від того яке значення прийшло на вхід встановлюється значення параметрів i .
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@if (isThumbUp)
{
<p class="text-success">Your thumb is up</p>
}
@if (isThumbDown)
{
<p class="text-danger">Your thumb is down</p>
}
@if (!isThumbDown && !isThumbUp)
{
<div class="row">
<div class="col-12">
<ThumbButton OnVote="OnVotedHandler"></ThumbButton>
</div>
</div>
}
@code
{
private bool isThumbUp = false;
private bool isThumbDown = false;
private void OnVotedHandler(ThumbButton.Thumb result)
{
if (result == ThumbButton.Thumb.Up)
{
isThumbUp = true;
}
else if (result == ThumbButton.Thumb.Down)
{
isThumbDown = true;
}
}
}

2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів