Delen via


Onderdeelcomponenten Razor gebruiken in JavaScript-apps en Single Page Applicatie-frameworks.

Opmerking

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.

Belangrijk

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikel voor de huidige release.

In dit artikel wordt beschreven hoe u onderdelen uit JavaScript weergeeft Razor , aangepaste elementen gebruikt Blazor en Angular- en React-onderdelen genereert.

Opmerking

U wordt aangeraden de (blazor.server.js) en Blazor Server (blazor.webassembly.js) scripts te gebruiken bij het Blazor WebAssembly integreren van Razor onderdelen in een bestaande JavaScript-app totdat er in de toekomst betere ondersteuning voor het blazor.web.js (Blazor Web App) script wordt toegevoegd. Zie RegisterCustomElement werkt niet meer in Blazor 8 (dotnet/aspnetcore #53920) voor meer informatie.

Angular-voorbeeld-apps

Onderdelen weergeven Razor vanuit JavaScript

Razor onderdelen kunnen dynamisch worden gerenderd vanuit JavaScript (JS) voor bestaande JS apps.

In het voorbeeld in deze sectie wordt het volgende Razor-onderdeel via JS naar een pagina weergegeven.

Quote.razor:

<div class="m-5 p-5">
    <h2>Quote</h2>
    <p>@Text</p>
</div>

@code {
    [Parameter]
    public string? Text { get; set; }
}

Voeg in het Program bestand de naamruimte toe voor de locatie van het onderdeel.

Roep RegisterForJavaScript de verzameling hoofdonderdelen van de app aan om een Razor onderdeel te registreren als hoofdonderdeel voor JS rendering.

RegisterForJavaScript bevat een overbelasting die de naam accepteert van een JS functie die initialisatielogica (javaScriptInitializer) uitvoert. De JS functie wordt eenmaal per onderdeelregistratie aangeroepen direct nadat de Blazor app is gestart en voordat onderdelen worden weergegeven. Deze functie kan worden gebruikt voor integratie met JS technologieën, zoals aangepaste HTML-elementen of een JS-gebaseerd SPA-framework.

Een of meer initialisatiefuncties kunnen worden gemaakt en aangeroepen door verschillende onderdeelregistraties. De typische gebruikssituatie is dat dezelfde initialisatiefunctie voor meerdere componenten wordt hergebruikt, wat wordt verwacht als de initialisatiefunctie integratie met aangepaste elementen of een ander op JS-gebaseerd Single Page Application-framework configureert.

Belangrijk

Verwar de javaScriptInitializer parameter RegisterForJavaScript van JavaScript-initializers niet. De naam van de parameter en de JS initialisatiefunctie zijn samenvallend.

In het volgende voorbeeld ziet u de dynamische registratie van het voorgaande Quote onderdeel met 'quote' als id.

  • Wijzig in een Blazor Server app in het AddServerSideBlazor bestand de aanroep naar Program.

    builder.Services.AddServerSideBlazor(options =>
    {
        options.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", 
            javaScriptInitializer: "initializeComponent");
    });
    
  • In een Blazor WebAssembly app, roep RegisterForJavaScript aan op RootComponents in het client-side Program bestand:

    builder.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", 
        javaScriptInitializer: "initializeComponent");
    

Koppel de initialisatiefunctie met name en parameters functieparameters aan het window object. Voor demonstratiedoeleinden registreert de volgende initializeComponent functie de naam en parameters van het geregistreerde onderdeel.

wwwroot/jsComponentInitializers.js:

window.initializeComponent = (name, parameters) => {
  console.log({ name: name, parameters: parameters });
}

Geef het onderdeel weer van JS in een containerelement met behulp van de geregistreerde id en geef indien nodig onderdeelparameters door.

In het volgende voorbeeld:

  • Het Quote onderdeel (quote id) wordt weergegeven in het quoteContainer element wanneer de showQuote functie wordt aangeroepen.
  • Een tekenreeks wordt doorgegeven aan de Text parameter van het onderdeel.

wwwroot/scripts.js:

window.showQuote = async () => {
  let targetElement = document.getElementById('quoteContainer');
  await Blazor.rootComponents.add(targetElement, 'quote', 
  {
    text: "Crow: I have my doubts that this movie is actually 'starring' " +
      "anybody. More like, 'camera is generally pointed at.'"
  });
}

const btn = document.querySelector("#showQuoteBtn");
btn.addEventListener("click", showQuote);

Nadat het Blazor script is geladen, laadt u de voorgaande scripts in de JS app:

<script src="_framework/{BLAZOR SCRIPT}"></script>
<script src="jsComponentInitializers.js"></script>
<script src="scripts.js"></script>

In het voorgaande voorbeeld is de {BLAZOR SCRIPT} tijdelijke aanduiding het Blazor script.

Plaats in HTML het doelcontainerelement (quoteContainer). In deze sectie van de demonstratie wordt het Quote onderdeel weergegeven door het aanroepen van de showQuoteJS functie door een knop.

<button id="showQuoteBtn">Show Quote</button>

<div id="quoteContainer"></div>

Bij initialisatie voordat onderdelen worden weergegeven, registreert de ontwikkelaarsconsole van de browser de id (Quote) en parameters (name) van het parameters-onderdeel wanneer initializeComponent wordt aangeroepen.

Object { name: "quote", parameters: (1) […] }
  name: "quote"
  parameters: Array [ {…} ]
    0: Object { name: "Text", type: "string" }
    length: 1

Wanneer de Show Quote knop is geselecteerd, wordt de Quote component weergegeven met de aanhaling opgeslagen in Text weergegeven.

Citaat weergegeven in de browser

Quote ©1988-1999 Satellite of Love LLC: Mystery Science Theater 3000 (TraceSourceu (Crow))

Opmerking

rootComponents.add retourneert een exemplaar van het onderdeel. Roep dispose aan op de instantie om het vrij te geven.

const rootComponent = await window.Blazor.rootComponents.add(...);

...

rootComponent.dispose();

In het voorgaande voorbeeld wordt het hoofdonderdeel dynamisch weergegeven wanneer de showQuote()JS functie wordt aangeroepen. Als u een hoofdonderdeel wilt weergeven in een containerelement wanneer Blazor u begint, gebruikt u een JavaScript-initializer om het onderdeel weer te geven, zoals in het volgende voorbeeld wordt gedemonstreert.

Het volgende voorbeeld is gebaseerd op het voorgaande voorbeeld met behulp van het Quote onderdeel, de registratie van het hoofdonderdeel in het Program bestand en de initialisatie van jsComponentInitializers.js. De showQuote() functie (en het script.js bestand) worden niet gebruikt.

Plaats in HTML het doelcontainer-element, quoteContainer2, als voorbeeld:

<div id="quoteContainer2"></div>

Voeg met behulp van een JavaScript-initialisatiefunctie het hoofdonderdeel toe aan het doelcontainerelement.

wwwroot/{PACKAGE ID/ASSEMBLY NAME}.lib.module.js:

export function afterStarted(blazor) {
  let targetElement = document.getElementById('quoteContainer2');
  blazor.rootComponents.add(targetElement, 'quote',
    {
      text: "Crow: I have my doubts that this movie is actually 'starring' " +
          "anybody. More like, 'camera is generally pointed at.'"
    });
}

Opmerking

Gebruik voor de aanroep rootComponents.add de blazor-parameter (kleine letter b) die is opgegeven door de Blazor start-gebeurtenis. Hoewel de registratie geldig is bij het gebruik van het Blazor object (hoofdletter B), is de voorkeursbenadering het gebruik van de parameter.

Zie het voorbeeld in de BasicTestApp ASP.NET Core-referentiebron (dotnet/aspnetcore GitHub-opslagplaats) voor een geavanceerd voorbeeld met extra functies:

Opmerking

Documentatiekoppelingen naar .NET-referentiebron laden meestal de standaardbranch van de opslagplaats, die de huidige ontwikkeling vertegenwoordigt voor de volgende release van .NET. Als u een tag voor een specifieke release wilt selecteren, gebruikt u de Switch branches of tags vervolgkeuzelijst. Zie Een versietag selecteren van ASP.NET Core-broncode (dotnet/AspNetCore.Docs #26205)voor meer informatie.

aangepaste elementen Blazor

Gebruik Blazor aangepaste elementen om onderdelen van verschillende JavaScript-technologieën dynamisch weer te geven Razor , zoals Angular, React en Vue.

Blazor aangepaste elementen:

  • Standaard HTML-interfaces gebruiken om aangepaste HTML-elementen te implementeren.
  • Elimineer de noodzaak om de status en levenscyclus van hoofdonderdelen Razor handmatig te beheren met behulp van JavaScript-API's.
  • Zijn nuttig voor het geleidelijk introduceren van Razor onderdelen in bestaande projecten die in andere technologieën zijn geschreven.

Aangepaste elementen bieden geen ondersteuning voor kindinhoud of gesjabloneerde componenten.

Naam van element

Volgens de HTML-specificatie moeten aangepaste elementtag-namen gebruikmaken van kebab case:

Ongeldig:mycounter
Ongeldig:MY-COUNTER
Ongeldig:MyCounter
Geldig:my-counter
Geldig:my-cool-counter

Pakket

Voeg een pakketreferentie toe voor Microsoft.AspNetCore.Components.CustomElements aan het projectbestand van de app.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.

Voorbeeldonderdeel

De volgende voorbeelden zijn gebaseerd op het Counter onderdeel van de Blazor projectsjabloon.

Counter.razor:

@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount() => currentCount++;
}

Blazor Server registratie

Voer de volgende stappen uit om een hoofdonderdeel te registreren als een aangepast element in een Blazor Server app.

Voeg de Microsoft.AspNetCore.Components.Web naamruimte toe aan het begin van het Program bestand:

using Microsoft.AspNetCore.Components.Web;

Voeg een naamruimte toe voor de onderdelen van de app. In het volgende voorbeeld bevindt de naamruimte van de app zich BlazorSample en bevinden de onderdelen zich in de Pages map:

using BlazorSample.Pages;

Wijzig de aanroep naar AddServerSideBlazor. Geef het aangepaste element op bij RegisterCustomElement de RootComponents circuitoptie. In het volgende voorbeeld wordt het Counter onderdeel geregistreerd met het aangepaste HTML-element my-counter:

builder.Services.AddServerSideBlazor(options =>
{
    options.RootComponents.RegisterCustomElement<Counter>("my-counter");
});

Blazor WebAssembly registratie

Voer de volgende stappen uit om een hoofdonderdeel te registreren als een aangepast element in een Blazor WebAssembly app.

Voeg de Microsoft.AspNetCore.Components.Web naamruimte toe aan het begin van het Program bestand:

using Microsoft.AspNetCore.Components.Web;

Voeg een naamruimte toe voor de onderdelen van de app. In het volgende voorbeeld bevindt de naamruimte van de app zich BlazorSample en bevinden de onderdelen zich in de Pages map:

using BlazorSample.Pages;

Bel RegisterCustomElement op RootComponents. In het volgende voorbeeld wordt het Counter onderdeel geregistreerd met het aangepaste HTML-element my-counter:

builder.RootComponents.RegisterCustomElement<Counter>("my-counter");

Het geregistreerde aangepaste element gebruiken

Gebruik het aangepaste element met elk webframework. Het voorgaande my-counter aangepaste HTML-element dat het onderdeel van Counter de app weergeeft, wordt bijvoorbeeld gebruikt in een React-app met de volgende markeringen:

<my-counter></my-counter>

Zie het onderdeel in de referentiebron voor een volledig voorbeeld van het Blazor maken van aangepaste elementen.CustomElementsComponent

Opmerking

Documentatiekoppelingen naar .NET-referentiebron laden meestal de standaardbranch van de opslagplaats, die de huidige ontwikkeling vertegenwoordigt voor de volgende release van .NET. Als u een tag voor een specifieke release wilt selecteren, gebruikt u de Switch branches of tags vervolgkeuzelijst. Zie Een versietag selecteren van ASP.NET Core-broncode (dotnet/AspNetCore.Docs #26205)voor meer informatie.

Parameters doorgeven

Geef parameters door aan uw Razor onderdeel als HTML-kenmerken of als JavaScript-eigenschappen op het DOM-element.

In het volgende Counter onderdeel wordt een IncrementAmount parameter gebruikt om de incrementele hoeveelheid van de Click me knop in te stellen.

Counter.razor:

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    [Parameter]
    public int IncrementAmount { get; set; } = 1;

    private void IncrementCount()
    {
        currentCount += IncrementAmount;
    }
}

Geef het Counter onderdeel weer met het aangepaste element en geef een waarde door aan de IncrementAmount parameter als een HTML-kenmerk. De kenmerknaam gebruikt de kebab-case syntaxis (increment-amount, niet IncrementAmount):

<my-counter increment-amount="10"></my-counter>

U kunt de waarde van de parameter ook instellen als een JavaScript-eigenschap voor het elementobject. De naam van de eigenschap gebruikt de camel case-syntaxis (incrementAmount, niet IncrementAmount):

const elem = document.querySelector("my-counter");
elem.incrementAmount = 10;

U kunt parameterwaarden op elk gewenst moment bijwerken met behulp van de kenmerk- of eigenschapsyntaxis.

Ondersteunde parametertypen:

  • Met behulp van JavaScript-eigendoms syntaxis kunt u objecten doorgeven van elk JSON-serialiseerbaar type.
  • Met HTML-kenmerken kunt u alleen objecten van tekenreeks-, Booleaanse of numerieke typen doorgeven.

Experimentele ondersteuning is beschikbaar voor het bouwen van aangepaste elementen met behulp van het Microsoft.AspNetCore.Components.CustomElements NuGet-pakket. Aangepaste elementen maken gebruik van standaard HTML-interfaces om aangepaste HTML-elementen te implementeren.

Waarschuwing

Experimentele functies worden geboden voor het verkennen van de levensvatbaarheid van functies en worden mogelijk niet in een stabiele versie verzonden.

Een hoofdonderdeel registreren als een aangepast element:

  • Wijzig in een Blazor Server app de aanroep naar AddServerSideBlazor het Program bestand om aan te roepen RegisterCustomElement op CircuitOptions.RootComponents:

    builder.Services.AddServerSideBlazor(options =>
    {
        options.RootComponents.RegisterCustomElement<Counter>("my-counter");
    });
    

    Opmerking

    In het voorgaande codevoorbeeld is een naamruimte vereist voor de onderdelen van de app (bijvoorbeeld using BlazorSample.Components.Pages;) in het Program bestand.

  • Roep in een Blazor WebAssembly app RegisterCustomElement aan op WebAssemblyHostBuilder.RootComponents in het Program bestand.

    builder.RootComponents.RegisterCustomElement<Counter>("my-counter");
    

    Opmerking

    In het voorgaande codevoorbeeld is een naamruimte vereist voor de onderdelen van de app (bijvoorbeeld using BlazorSample.Components.Pages;) in het Program bestand.

Neem de volgende <script> tag op in de HTML van de app vóór de Blazor scripttag:

<script src="/_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script>

Gebruik het aangepaste element met elk webframework. Het voorgaande teller-aangepaste element wordt bijvoorbeeld gebruikt in een React-app met de volgende markeringen:

<my-counter increment-amount={incrementAmount}></my-counter>

Waarschuwing

De functie voor aangepaste elementen is momenteel experimenteel, niet ondersteund en kan op elk gewenst moment worden gewijzigd of verwijderd. We verwelkomen uw feedback over hoe goed deze specifieke benadering voldoet aan uw vereisten.

Angular- en React-onderdelen genereren

JavaScript-onderdelen (JS) genereren op basis van Razor onderdelen voor JavaScript-technologieën, zoals Angular of React. Deze mogelijkheid is niet opgenomen in .NET, maar wordt ingeschakeld door de ondersteuning voor renderingonderdelen Razor van JS. Het JS voorbeeld van het genereren van onderdelen op GitHub laat zien hoe u Angular- en React-onderdelen genereert op basis van Razor onderdelen. Zie het README.md-bestand van de GitHub-voorbeeld-app voor meer informatie.

Waarschuwing

De functies van het Angular- en React-onderdeel zijn momenteel experimenteel, niet ondersteund en kunnen op elk gewenst moment worden gewijzigd of verwijderd. We verwelkomen uw feedback over hoe goed deze specifieke benadering voldoet aan uw vereisten.