Ejercicio: Mejora de la interactividad de aplicaciones con eventos del ciclo de vida
La compañía de pizzas ha decidido que les gustaría vender una pizza especial de tamaño familiar que solo está disponible en un tamaño de 24 pulgadas. La aplicación de pizza actual tiene un control deslizante de tamaño que no admite una pizza de tamaño único. Se le pedirá que agregue la nueva pizza de tamaño familiar y deshabilite la opción de tamaño para esa pizza.
En este ejercicio, cambiará la base de datos de pizzas para agregar la pizza de tamaño familiar y cambiará el modelo de pizza para admitir la nueva pizza. Para controlar los eventos de ciclo de vida de los componentes de Blazor, realice cambios en el cuadro de diálogo de configuración de pizzas para controlar el caso de tamaño fijo.
Creación de la nueva pizza de tamaño familiar
En primer lugar, agregue la nueva funcionalidad FixedSize
al modelo de pizza y cree la nueva pizza de tamaño familiar en la base de datos de pizzas.
En el Explorador de Visual Studio Code, expanda Modelos y seleccione PizzaSpecial.cs.
En el archivo PizzaSpecial.cs, después de la propiedad
ImageUrl
, agregue la siguiente propiedad nueva:public int? FixedSize { get; set; }
Abra Pizza.cs y reemplace el método
GetBasePrice
por el código siguiente:public decimal GetBasePrice() => Special is { FixedSize: not null } ? Special.BasePrice : (decimal)Size / DefaultSize * Special?.BasePrice ?? 1;
El código ahora tiene en cuenta un elemento especial que tiene un valor
FixedSize
cuando devuelveBasePrice
.Expanda Datos y seleccione SeedData.cs.
En el archivo SeedData.cs, agregue el código siguiente para la nueva pizza de tamaño familiar al final de la declaración de matriz
specials
en el métodoInitializeAsync
.new() { Id = 9, Name = "Margherita Family Size", Description = "24\" of pure tomatoes and basil", BasePrice = 14.99m, ImageUrl = "img/pizzas/margherita.jpg", FixedSize = 24 }
La clase
SeedData
se usa para rellenar previamente la base de datos de pizzas con pizzas especiales. Para que se cree la nuevaPizzaSpecial
, debe eliminar la base de datos existente. En el Explorador, seleccione y elimine los archivos pizza.db, pizza.db-shm y pizza.db-wal.En Visual Studio Code, presione F5 o seleccione Ejecutar>Iniciar depuración.
En la aplicación, seleccione la nueva pizza Margherita Family Size.
En el formulario de pedido, observe que todavía puede cambiar el tamaño de la pizza.
Presione Mayús+F5 o seleccione Ejecutar>Detener depuración para detener la aplicación.
Eliminación del control deslizante de tamaño
El componente ConfigurePizzaDialog
usa un elemento range
HTML para permitir al cliente seleccionar el tamaño de la pizza. Una manera de deshabilitar la entrada del usuario es omitir condicionalmente la representación del control de usuario de tamaño por completo.
En el Explorador de Visual Studio Code, expanda Compartido y seleccione ConfigurePizzaDialog.razor.
En la directiva
@code
, después de las propiedades existentes, agregue los siguientes miembros:bool supportSizing = true; protected override void OnInitialized() { if (Pizza is { Special.FixedSize: not null }) { Pizza.Size = Pizza.Special.FixedSize.Value; supportSizing = false; } }
El campo
supportSizing
adoptatrue
como valor predeterminado, pero si la pizza tiene un tamaño fijo, se establece enfalse
. La invalidación del método de ciclo de vidaOnInitialized
establece el tamaño de la pizza en el tamaño fijo y deshabilita la compatibilidad con el cambio de tamaño.Nota
Si el código tuviera que depender de la interoperabilidad de JavaScript, el uso del método
OnInitialized
no habría funcionado. En su lugar, tendría que haber usado el métodoOnAfterRenderAsync
para asegurarse de que la interoperabilidad de JavaScript está disponible.Cerca de la parte superior del archivo en
<form class="dialog-body">
, reemplace las líneaslabel
yinput
existentes por el código siguiente:@if (supportSizing) { <label>Size:</label> <input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind="Pizza.Size" @bind:event="oninput" /> }
Presione F5 o seleccione Ejecutar>Iniciar depuración.
Agregue la pizza de tamaño familiar y compruebe que el control deslizante de tamaño está deshabilitado porque se omite de la representación.
Pida una pizza diferente y compruebe que todavía puede usar el control deslizante de tamaño para esa pizza.
Presione Mayús+F5 o seleccione Ejecutar>Detener depuración para detener la aplicación.