Cvičení – použití javascriptové knihovny v aplikaci Blazor

Dokončeno

Jakmile zákazník přidá pizzu do objednávky, může vybrat ikonu X a odebrat pizzu z objednávky bez potvrzení. Aby zákazníci omylem odebrali pizzy ze svých objednávek, chce, abyste přidali potvrzovací výzvu k odebrání položky.

Pizza společnost také chce, aby zákazníci viděli, jak jejich objednávka probíhá v reálném čase. Musíte aktualizovat stránku podrobností objednávky tak, aby se průběžně dotazovat na stav objednávky, a dát zákazníkům zpětnou vazbu, že se stránka aktualizuje.

V tomto cvičení rozšíříte stávající aplikaci společnosti pro doručování pizzy pomocí zprostředkovatele JS z komponenty Blazor a zavoláte JavaScript na straně klienta. Integrujete se s knihovnou JavaScriptu třetí strany, která vylepšuje místní okno zrušení, a zavoláte metodu Blazor z JavaScriptu, abyste získali stav objednávky zákazníka v reálném čase.

Klonování existující aplikace

Pokud chcete použít Blazor, ujistěte se, že máte nainstalovanou sadu .NET 8.0 SDK . Další informace najdete v tématu Kontrola všeho, co je správně nainstalované.

  1. Otevřete Visual Studio Code a otevřete integrovaný terminál tak, že v horní nabídce vyberete Terminál>Nový terminál.

  2. V terminálu přejděte do adresáře, do kterého chcete projekt vytvořit.

  3. Spuštěním následujícího příkazu naklonujte aplikaci z GitHubu do místního podadresáře.

    git clone https://github.com/MicrosoftDocs/mslearn-build-interactive-components-blazor.git BlazingPizza
    
  4. V horním řádku nabídek vyberte Otevřít složku souboru>.

  5. V dialogovém okně Otevřít složku přejděte do složky BlazingPizza a vyberte Vybrat složku.

    Pokud vás Visual Studio Code vyzve k zadání chybějících prostředků nebo nevyřešených závislostí, vyberte Ano nebo Obnovit.

  6. Pokud chcete aplikaci spustit a zkontrolovat, jestli všechno funguje správně, stiskněte klávesu F5 nebo vyberte Spustit ladění>.

  7. Ve webové aplikaci vyberte některé pizzy a přidejte je do objednávky. Když máte v seznamu objednávek několik pizz, vyberte X vedle jedné z pizz a ověřte, že položka zmizí bez výzvy.

  8. Stisknutím kláves Shift+F5 nebo výběrem možnosti Spustit>zastavit ladění aplikaci zastavte.

Refaktoring procesu objednávky

Chcete-li použít interoperabilitu IJSRuntime JS, vložíte abstrakci.

  1. V Průzkumníku editoru Visual Studio Code rozbalte položku Pages a pak vyberte Index.razor.

  2. Do souboru Index.razor za @inject OrderState OrderState příkaz přidejte IJSRuntime injektáž následujícím způsobem.

    @inject OrderState OrderState
    @inject IJSRuntime JavaScript
    
  3. onclick V současné době událost funkce odebrání pizzy volá metodu OrderState.RemoveConfiguredPizza(configuredPizza)) přímo. Nahraďte celý element <a @onclick="@(() => OrderState.RemoveConfiguredPizza(configuredPizza))" class="delete-item">❌</a> následujícím kódem:

    <button type="button" class="close text-danger" aria-label="Close"
         @onclick="@(async () => await RemovePizzaConfirmation(configuredPizza))">
         <span aria-hidden="true">&times;</span>
    </button>
    
  4. @code Do direktivy na konec souboru přidejte novou metodu pro volání nativní javascriptové confirm funkce. Pokud zákazník na příkazovém řádku vybere OK , metoda zavolá OrderState.RemoveConfiguredPizza odebrání pizzy z objednávky. Jinak pizza zůstane v objednávce.

    async Task RemovePizzaConfirmation(Pizza removePizza)
    {
        if (await JavaScript.InvokeAsync<bool>(
            "confirm",
            $"""Do you want to remove the "{removePizza.Special!.Name}" from your order?"""))
        {
            OrderState.RemoveConfiguredPizza(removePizza);
        }
    }
    

    Server používá metodu IJSRuntime.InvokeAsync confirm k volání funkce na straně klienta. Odpověď z volání vrátí bool hodnotu. Pokud je truevýsledkem dialogového okna potvrzení, pizza se z objednávky odebere.

  5. Stiskněte klávesu F5 nebo vyberte Spustit>ladění.

  6. V aplikaci přidejte do objednávky nějaké pizzy.

  7. S několika pizzami ve vaší objednávce vyberte X vedle jedné z pizz. Zobrazí se standardní dialogové okno pro potvrzení JavaScriptu.

    Screenshot of the default JavaScript confirm dialog.

  8. Vyberte OK a ověřte, že je z vaší objednávky odebrána pizza. Vyberte X vedle jiné pizzy, v dialogovém okně potvrzení vyberte Storno a ověřte, že pizza zůstane ve vaší objednávce.

  9. Stisknutím kláves Shift+F5 nebo výběrem možnosti Spustit>zastavit ladění aplikaci zastavte.

Přidání knihovny JavaScriptu třetí strany do aplikace Blazor

Společnost pizza chce na tlačítkách v dialogovém okně potvrdit srozumitelnější text a chce v dialogovém okně použít jejich branding a styl. Po nějakém výzkumu se rozhodnete použít malou javascriptovou knihovnu s názvem SweetAlert jako dobrou náhradu za standardní dialog.

  1. V Průzkumníku editoru Visual Studio Code rozbalte položku Pages a pak vyberte _Host.cshtml.

  2. Na konci souboru _Host.cshtml za <script src="_framework/blazor.server.js"></script> řádek, ale před </body> řádek přidejte následující script prvek, který zahrne knihovnu SweetAlert.

    <script src="https://cdn.jsdelivr.net/npm/sweetalert@latest/dist/sweetalert.min.js"></script>
    

    Knihovna SweetAlert je nyní k dispozici pro volání na straně klienta.

  3. Chcete-li použít novou knihovnu, aktualizujte metodu RemovePizzaConfirmation v souboru Index.razor následujícím způsobem.

    async Task RemovePizzaConfirmation(Pizza removePizza)
    {
        var messageParams = new
        {
            title = "Remove Pizza?",
            text = $"""Do you want to remove the "{removePizza.Special!.Name}" from your order?""",
            icon = "warning",
            buttons = new
            {
                abort = new { text = "No, leave it in my order", value = false },
                confirm = new { text = "Yes, remove pizza", value = true }
            },
            dangerMode = true
        };
    
        if (await JavaScript.InvokeAsync<bool>("swal", messageParams))
        {
            OrderState.RemoveConfiguredPizza(removePizza);
        }
    }
    

    Název "swal" je identifikátor funkce JavaScriptu, která pochází z sweetalert.js odkazu třetí strany. Kód pro swal volání funkce vypadá podobně jako confirm. Většina aktualizace spočívá v tom, jak funkce přijímá parametry. SweetAlert přijímá objekt JSON, který zahrnuje všechna nastavení, která potřebuje.

  4. V editoru Visual Studio Code stiskněte klávesu F5 nebo vyberte Spustit spuštění>ladění.

  5. Ověřte, že confirm dialogové okno teď obsahuje dvě tlačítka, která říkají Ne, nechte ho v mém pořadí a Ano, odeberte pizzu a že fungují podle očekávání.

    Screenshot showing the SweetAlert dialog box.

  6. Stisknutím kláves Shift+F5 nebo výběrem možnosti Spustit>zastavit ladění aplikaci zastavte.

Aktualizace stránky objednávky tak, aby zobrazovala stav objednávky v reálném čase

Jakmile zákazník umístí objednávku pizzy, stránka Moje objednávky použije komponentu OrderDetail k zobrazení aktuálního stavu objednávky. Společnost pizza chce, aby zákazníci viděli, jak jejich objednávka probíhá v reálném čase. Aktualizujete komponentu tak, aby volala metodu .NET z JavaScriptu, která nepřetržitě získává stav objednávky, dokud se stav nezobrazí.

  1. V Průzkumníku editoru Visual Studio Code rozbalte stránky a pak vyberte OrderDetail.razor.

  2. Do souboru OrderDetail.razor přidejte do posledního @inject příkazu následující deklaraci v horní části komponenty.

    @implements IDisposable
    

    Tato @implements deklarace umožňuje definovat metodu Dispose .

  3. Přidejte na stránku číselník a pošlete zákazníkovi zpětnou vazbu, že se stránka aktualizuje. Do <div class="track-order-details">příkazu nad příkaz @foreach přidejte následující kód:

    @if (IsOrderIncomplete)
    {
        <div class="spinner-grow text-danger float-right" role="status">
            <span class="sr-only">Checking your order status...</span>
        </div>
    }
    
  4. V direktivě @code přidejte do OrderId deklarace vlastnosti následující členy.

    bool IsOrderIncomplete =>
        orderWithStatus is null || orderWithStatus.IsDelivered == false;
    
    PeriodicTimer timer = new(TimeSpan.FromSeconds(3));
    
  5. Nahraďte existující OnParametersSetAsync metodu následujícím kódem:

    protected override async Task OnParametersSetAsync() =>
        await GetLatestOrderStatusUpdatesAsync();
    

    Kód teď volá metodu GetLatestOrderStatusUpdatesAsync pro aktualizaci stavu objednávky.

  6. Za aktualizovanou OnParametersSetAsync metodu přidejte následující metody.

    protected override Task OnAfterRenderAsync(bool firstRender) =>
        firstRender ? StartPollingTimerAsync() : Task.CompletedTask;
    
    async Task GetLatestOrderStatusUpdatesAsync()
    {
        try
        {
            orderWithStatus = await HttpClient.GetFromJsonAsync<OrderWithStatus>(
                $"{NavigationManager.BaseUri}orders/{OrderId}");
        }
        catch (Exception ex)
        {
            invalidOrder = true;
            Console.Error.WriteLine(ex);
        }
    }
    
    async Task StartPollingTimerAsync()
    {
        while (IsOrderIncomplete && await timer.WaitForNextTickAsync())
        {
            await GetLatestOrderStatusUpdatesAsync();
            StateHasChanged();
        }
    }
    
    public void Dispose() => timer.Dispose();
    

    Komponenta OrderDetail se spustí dotazování po vykreslení stránky a zastaví dotazování při doručení objednávky. I když je stav objednávky neúplný, StartPollingTimerAsync funkce použije PeriodicTimer k asynchronnímu čekání na další zaškrtnutí. Po doručení objednávky se animovaný číselník odebere a na stránce se zobrazí konečný stav objednávky.

  7. V editoru Visual Studio Code stiskněte klávesu F5 nebo vyberte Spustit spuštění>ladění.

  8. V aplikaci si objednejte pizzu. Přejděte na obrazovku Moje objednávky a ověřte, že se zobrazí animované červené tečky, když je objednávka neúplná a zmizí, když se zobrazí stav Doručeno.

    Animation showing the order status changing in real-time.

  9. Stisknutím kláves Shift+F5 nebo výběrem možnosti Spustit>zastavit ladění aplikaci zastavte.