Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
-
CustomElementsBlazorSample (Blazor Server) (
javiercn/CustomElementsBlazorSample, branch:blazor-server): Blazor Server wordt ondersteund in .NET 8/9. Zie Migreren van ASP.NET Core in .NET 7 naar .NET 8 en Migreren van ASP.NET Core in .NET 8 naar ASP.NET Core in .NET 9 om dit voorbeeld te migreren. -
CustomElementsBlazorSample (Blazor WebAssembly) (
javiercn/CustomElementsBlazorSample, vertakking:blazor-wasm): Om dit .NET 7-voorbeeld te migreren, zie Migreren van ASP.NET Core in .NET 7 naar .NET 8 en Migreren van ASP.NET Core in .NET 8 naar ASP.NET Core in .NET 9.
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
Programbestand: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
Quoteonderdeel (quoteid) wordt weergegeven in hetquoteContainerelement wanneer deshowQuotefunctie wordt aangeroepen. - Een tekenreeks wordt doorgegeven aan de
Textparameter 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.
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
Programbestand 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 hetProgrambestand.Roep in een Blazor WebAssembly app RegisterCustomElement aan op WebAssemblyHostBuilder.RootComponents in het
Programbestand.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 hetProgrambestand.
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.