Übung: Verwenden einer JavaScript-Bibliothek in einer Blazor-App
Nachdem ein Kunde seiner Bestellung eine Pizza hinzugefügt hat, kann er ein X-Symbol auswählen, um die Pizza ohne Bestätigung aus der Bestellung zu entfernen. Um zu verhindern, dass Kunden Pizza versehentlich aus ihren Bestellungen entfernen, möchte das Pizzaunternehmen, dass Sie eine Bestätigungsaufforderung zum Entfernen von Artikeln hinzufügen.
Das Pizzaunternehmen möchte auch kunden sehen, wie ihre Bestellung in Echtzeit voranschreitet. Sie müssen die Bestelldetailseite aktualisieren, um den Bestellstatus kontinuierlich abzufragen, und geben Sie Kunden Feedback, dass die Seite aktualisiert wird.
In dieser Übung erweitern Sie die vorhandene App des Pizzazustellunternehmens mit JS-Interoperabilität aus einer Blazor-Komponente, um JavaScript auf clientseitiger Seite aufzurufen. Sie integrieren sich in eine JavaScript-Bibliothek eines Drittanbieters, um das Abbruchpopup zu verbessern, und rufen eine Blazor-Methode aus JavaScript auf, um den Echtzeitstatus einer Kundenbestellung zu erhalten.
Klonen der vorhandenen App
In diesem Modul wird das .NET 9.0 SDK verwendet. Stellen Sie sicher, dass .NET 9.0 installiert ist, indem Sie in Ihrem bevorzugten Befehlsterminal den folgenden Befehl ausführen:
dotnet --list-sdks
Die daraufhin angezeigte Ausgabe sieht in etwa wie im folgenden Beispiel aus:
8.0.100 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]
Stellen Sie sicher, dass eine Version aufgeführt wird, die mit 9 beginnt. Wenn nichts aufgeführt ist oder der Befehl nicht gefunden wurde, installieren Sie das neueste .NET 9.0 SDK.
Weitere Informationen finden Sie unter Erstellen Ihrer ersten Web-App mit ASP.NET Core mit Blazor.
Öffnen Sie Visual Studio Code, und öffnen Sie ein integriertes Terminal, indem Sie im oberen Menü " Terminal>neu" auswählen.
Ändern Sie im Terminal das Verzeichnis, in dem Sie das Projekt erstellen möchten.
Führen Sie den folgenden Befehl aus, um die App von GitHub in ein lokales Unterverzeichnis zu klonen.
git clone https://github.com/MicrosoftDocs/mslearn-build-interactive-components-blazor.git BlazingPizzaWählen Sie in der oberen Menüleiste "Datei>Ordner öffnen" aus.
Navigieren Sie im Dialogfeld " Ordner öffnen " zum Ordner "BlazingPizza ", und wählen Sie "Ordner auswählen" aus.
Wenn Visual Studio Code Sie zu fehlenden Ressourcen oder nicht aufgelösten Abhängigkeiten auffordert, wählen Sie "Ja " oder "Wiederherstellen" aus.
Um die App auszuführen und zu überprüfen, ob alles ordnungsgemäß funktioniert, drücken Sie F5 , oder wählen Sie "Debuggen starten">aus.
Wählen Sie in der Web-App einige Pizzas aus, und fügen Sie sie zu Ihrer Bestellung hinzu. Wählen Sie bei einigen Pizzen in Ihrer Bestellliste das X neben einer der Pizzen aus und überprüfen Sie, dass das Element ohne vorherige Bestätigung entfernt wird.
Drücken Sie UMSCHALT+F5, oder wählen Sie Ausführen>Debugging beenden aus, um die App zu beenden.
Umgestalten des Bestellvorgangs
Um JS-Interoperabilität zu verwenden, setzen Sie die IJSRuntime Abstraktion ein.
Erweitern Sie im Explorer von Visual Studio Code Seiten und wählen Sie dann Index.razor aus.
Fügen Sie in der Datei Index.razor nach der
@inject OrderState OrderStateAnweisung dieIJSRuntimeInjektion wie folgt hinzu.@inject OrderState OrderState @inject IJSRuntime JavaScriptDerzeit ruft das
onclickEreignis für die Funktionalität zum Entfernen einer Pizza dieOrderState.RemoveConfiguredPizza(configuredPizza))Methode direkt auf. Ersetzen Sie das gesamte<a @onclick="@(() => OrderState.RemoveConfiguredPizza(configuredPizza))" class="delete-item">❌</a>-Element durch den folgenden Code:<button type="button" class="close text-danger" aria-label="Close" @onclick="@(async () => await RemovePizzaConfirmation(configuredPizza))"> <span aria-hidden="true">×</span> </button>Fügen Sie in der
@codeDirektive am Ende der Datei eine neue Methode hinzu, um die systemeigene JavaScript-Funktionconfirmaufzurufen. Wenn der Kunde in der Eingabeaufforderung "OK " auswählt, ruft die Methode aufOrderState.RemoveConfiguredPizza, die Pizza aus der Bestellung zu entfernen. Andernfalls bleibt die Pizza in der Bestellung.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); } }Der Server verwendet die IJSRuntime.InvokeAsync Methode, um die
confirmFunktion auf clientseitiger Seite aufzurufen. Die Antwort des Aufrufs gibt einenboolWert zurück. Wenn das Ergebnis des Bestätigungsdialogfelds lautettrue, wird die Pizza aus der Bestellung entfernt.Drücken Sie F5, oder wählen Sie Ausführen>Debugging starten aus.
Fügen Sie in der App Ihrer Bestellung einige Pizzas hinzu.
Wenn Sie einige Pizzas in Ihrer Bestellung haben, wählen Sie das X neben einer der Pizzas aus. Ein Standardmäßiges JavaScript-Bestätigungsdialogfeld wird angezeigt.
Wählen Sie "OK" aus, und vergewissern Sie sich, dass die Pizza aus Ihrer Bestellung entfernt wird. Wählen Sie "X " neben einer anderen Pizza aus, wählen Sie im Bestätigungsdialogfeld "Abbrechen " aus, und vergewissern Sie sich, dass die Pizza in Ihrer Bestellung verbleibt.
Drücken Sie UMSCHALT+F5, oder wählen Sie Ausführen>Debugging beenden aus, um die App zu beenden.
Hinzufügen einer JavaScript-Bibliothek eines Drittanbieters zu einer Blazor-App
Das Pizzaunternehmen möchte einen klareren Text auf die Schaltflächen im Bestätigungsdialogfeld und im Dialogfeld ihr Branding und ihre Formatierung anwenden. Nach einigen Recherchen entscheiden Sie sich für die Verwendung einer kleinen JavaScript-Bibliothek namens SweetAlert als guter Ersatz für das Standarddialogfeld.
Erweitern Sie im Visual Studio Code-Explorer die Option Seiten, und wählen Sie dann _Host.cshtml aus.
Fügen Sie am Ende der Datei _Host.cshtml nach der
<script src="_framework/blazor.server.js"></script>Zeile, aber vor der</body>Zeile das folgendescriptElement hinzu, um die SweetAlert-Bibliothek einzuschließen.<script src="https://cdn.jsdelivr.net/npm/sweetalert@latest/dist/sweetalert.min.js"></script>Die SweetAlert-Bibliothek ist jetzt für den Aufruf auf der Clientseite verfügbar.
Um die neue Bibliothek zu verwenden, aktualisieren Sie die
RemovePizzaConfirmationMethode in der Datei Index.razor wie folgt.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); } }Der
"swal"Name ist der Bezeichner für die JavaScript-Funktion, die aus der Drittanbieterreferenz sweetalert.js stammt. Der Code zum Aufrufen derswalFunktion sieht ähnlich aus wieconfirm. Die meisten Updates sind in der Art und Weise, wie die Funktion Parameter empfängt. SweetAlert akzeptiert ein JSON-Objekt, das alle benötigten Einstellungen enthält.Drücken Sie in Visual Studio Code F5, oder wählen Sie im Menü Ausführen>Debugging starten aus.
Stellen Sie sicher, dass das
confirmDialogfeld jetzt zwei Schaltflächen enthält: Nein, in meiner Bestellung belassen und Ja, Pizza entfernen, und dass sie erwartungsgemäß funktionieren.Drücken Sie UMSCHALT+F5, oder wählen Sie Ausführen>Debugging beenden aus, um die App zu beenden.
Zeigt den Echtzeit-Bestellstatus auf der Bestellseite an
Sobald ein Kunde einen Pizzaauftrag aufgegeben hat, verwendet die Seite "Meine Bestellungen " die OrderDetail Komponente, um den aktuellen Status der Bestellung anzuzeigen. Das Pizzaunternehmen möchte kunden sehen, wie ihre Bestellung in Echtzeit voranschreitet. Sie aktualisieren die Komponente so, dass sie eine .NET-Methode aus JavaScript aufruft, die kontinuierlich den Bestellstatus abruft, bis der Status 'geliefert' angezeigt wird.
Erweitern Sie im Visual Studio Code ExplorerSeiten und wählen Sie dann OrderDetail.razor aus.
Fügen Sie in der Datei "OrderDetail.razor " die folgende Deklaration am Anfang der Komponente unter der letzten
@injectAnweisung hinzu.@implements IDisposableMit dieser
@implementsDeklaration können Sie eineDisposeMethode definieren.Fügen Sie der Seite ein Drehfeld hinzu, um Kund*innen darüber zu informieren, dass die Seite aktualisiert wird. Fügen Sie im
<div class="track-order-details">, oberhalb der@foreach-Anweisung, den folgenden Code hinzu:@if (IsOrderIncomplete) { <div class="spinner-grow text-danger float-right" role="status"> <span class="sr-only">Checking your order status...</span> </div> }Fügen Sie in der
@code-Anweisung unter derOrderId-Eigenschaftendeklaration die folgenden Member hinzu:bool IsOrderIncomplete => orderWithStatus is null || orderWithStatus.IsDelivered == false; PeriodicTimer timer = new(TimeSpan.FromSeconds(3));Ersetzen Sie die vorhandene
OnParametersSetAsyncMethode durch den folgenden Code:protected override async Task OnParametersSetAsync() => await GetLatestOrderStatusUpdatesAsync();Der Code ruft nun die
GetLatestOrderStatusUpdatesAsyncMethode auf, um den Bestellstatus zu aktualisieren.Fügen Sie die folgenden Methoden nach der aktualisierten
OnParametersSetAsyncMethode hinzu.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();Die
OrderDetailKomponente startet die Abfrage nach dem Rendern der Seite und beendet die Abrufung, wenn die Bestellung übermittelt wird. Während der Bestellstatus unvollständig ist, verwendet dieStartPollingTimerAsync-Funktion PeriodicTimer, um asynchron auf den nächsten Tick zu warten. Wenn die Bestellung geliefert wird, wird der animierte Spinner entfernt, und die Seite zeigt den endgültigen Bestellstatus an.Drücken Sie in Visual Studio Code F5, oder wählen Sie im Menü Ausführen>Debugging starten aus.
Bestellen Sie in der App eine Pizza. Wechseln Sie zum Bildschirm "Meine Bestellungen ", und stellen Sie sicher, dass der animierte rote Punkt angezeigt wird, während die Bestellung unvollständig ist und ausgeblendet wird, wenn der Status "Geliefert" angezeigt wird.
Drücken Sie UMSCHALT+F5, oder wählen Sie Ausführen>Debugging beenden aus, um die App zu beenden.


