Cvičení – vytvoření vazby ovládacích prvků k datům v aplikacích Blazor
Aplikace Blazing Pizza musí aktualizovat rozhraní, když zákazníci změní pizzy a přidají je do svých objednávek. Blazor umožňuje vytvořit vazbu ovládacích prvků HTML na vlastnosti jazyka C#, které se aktualizují při změně jejich hodnot.
Zákazníci by měli vidět, jaké pizzy objednávají a jak velikost, kterou zvolí, ovlivní cenu, kterou zaplatí.
V tomto cvičení získáte aplikaci Blazing Pizza v pozici, kde je možné objednávky aktualizovat a upravovat. Uvidíte, jak svázat ovládací prvky s vlastnostmi pizzy a přepočítat ceny těchto změn.
Zobrazení objednávky pizzy zákazníka
Přidáte boční panel, který zobrazí všechny pizzy, které zákazník přidal do objednávky.
Pokud je aplikace pořád spuštěná, zastavte ji.
V editoru Visual Studio Code v Průzkumníku souborů rozbalte stránky a pak vyberte Index.razor.
Mezi bloky
@if
@code
přidejte tento kód:<div class="sidebar"> @if (order.Pizzas.Any()) { <div class="order-contents"> <h2>Your order</h2> @foreach (var configuredPizza in order.Pizzas) { <div class="cart-item"> <div class="title">@(configuredPizza.Size)" @configuredPizza.Special.Name</div> <div class="item-price"> @configuredPizza.GetFormattedTotalPrice() </div> </div> } </div> } else { <div class="empty-cart">Choose a pizza<br>to get started</div> } <div class="order-total @(order.Pizzas.Any() ? "" : "hidden")"> Total: <span class="total-price">@order.GetFormattedTotalPrice()</span> <a href="checkout" class="@(OrderState.Order.Pizzas.Count == 0 ? "btn btn-warning disabled" : "btn btn-warning")"> Order > </a> </div> </div>
Tento kód HTML přidá boční panel na stránku. Pokud jsou nějaké pizzy v
OrderState.Order
, zobrazí je. Pokud nejsou žádné objednávky, zobrazí se zákazníkům výzva k přidání některých.Zobrazí se některé chyby, protože komponenta neví, co jsou objednávky.
@code
Do bloku podList<PizzaSpecial> specials = new();
přidejte tento kód:Order order => OrderState.Order;
Vyberte F5 nebo vyberte Spustit. Pak vyberte Spustit ladění.
Zkuste objednat pizzu a zrušit některé. Uvidíte, že se přidají do košíku a celkové aktualizace objednávky.
Vyberte Shift+F5 nebo vyberte Zastavit ladění.
Odebrání pizzy z objednávky zákazníka
Možná jste si všimli, že neexistuje způsob, jak odebrat nakonfigurovanou pizzu z nákupního košíku zákazníka. Pojďme přidat tuhle funkci.
Prvním krokem je aktualizace OrderState
služby tak, aby mohla poskytnout metodu odebrání pizzy z objednávky.
V Průzkumníku souborů vyberte Services/OrderState.cs.
V dolní části třídy přidejte tuto metodu:
public void RemoveConfiguredPizza(Pizza pizza) { Order.Pizzas.Remove(pizza); }
V Průzkumníku souborů rozbalte stránky a pak vyberte Index.razor.
<a>
Přidejte<div class="cart-item">
značku před uzavřením</div>
a vytvořte tlačítko pro odebrání:<a @onclick="@(() => OrderState.RemoveConfiguredPizza(configuredPizza))" class="delete-item">x</a>
Tato značka přidá na každou pizzu
X
na bočním panelu objednávky. Když je vybraná, volá metoduRemoveConfiguredPizza
ve služběOrderState
.Vyberte F5 nebo vyberte Spustit. Pak vyberte Spustit ladění.
Vyberte Shift+F5 nebo vyberte Zastavit ladění.
Dynamická konfigurace velikosti pizzy
Dialogové okno konfigurace pizzy se při změně posuvníku velikosti neaktualizuje. Komponenta potřebuje způsob, jak aktualizovat pizzu a velikost a pak přepočítat cenu.
V průzkumníku souborů rozbalte položku Sdílené a pak vyberte ConfigurePizzaDialog.razor.
Přidejte kód do
input
ovládacího prvku HTML, který vytvoří vazbu jeho hodnoty na velikost pizzy:<input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind="Pizza.Size"/>
Vyberte F5 nebo vyberte Spustit. Pak vyberte Spustit ladění.
Pomocí aktualizovaného dialogového okna přidejte do objednávky několik pizz s různou velikostí. Místo přetažení klikněte na posuvník. Všimněte si, že velikost pizzy se aktualizuje v události myši na ovládacím prvku.
Pokud posuvník přetáhnete, velikost se nezmění, dokud neuvolníte myš. Pojďme to opravit.
Vyberte Shift+F5 nebo vyberte Zastavit ladění.
Přidejte událost, ke které má být ovládací prvek vázán:
<input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind="Pizza.Size" @bind:event="oninput" />
Vyberte F5 nebo vyberte Spustit. Pak vyberte Spustit ladění.
Jak přidání @bind="Pizza.Size"
kódu poskytovalo tolik funkcí? Pokud prozkoumáte celý kód ConfigurePizzaDialog.razor , uvidíte, že váš tým už ostatní prvky připojil k vlastnostem pizzy.
Například aktualizace cen z důvodu tohoto kódu:
Price: <span class="price">@(Pizza.GetFormattedTotalPrice())</span>
Cena se aktualizuje při změně velikosti pizzy, protože metoda na pizze GetFormattedTotalPrice()
používá velikost pizzy k výpočtu celkové ceny.
Provedli jste pokrok v aplikaci Blazing Pizza. Pokud ho chcete dál vylepšovat, dokončete další modul v tomto studijním programu.