Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Viktigt!
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Den här artikeln beskriver hur du renderar Razor komponenter från JavaScript, använder Blazor anpassade element och genererar Angular- och React-komponenter.
Anmärkning
Vi rekommenderar att du använder skripten blazor.server.js (Blazor Server) och blazor.webassembly.js (Blazor WebAssembly) när du integrerar Razor komponenter i en befintlig JavaScript-app tills bättre stöd för skriptet blazor.web.js (Blazor Web App) läggs till i framtiden. För mer information, se RegisterCustomElement slutade fungera i Blazor 8 (dotnet/aspnetcore #53920).
Angular-exempelappar
- 
              CustomElementsBlazorSample (Blazor Server) (javiercn/CustomElementsBlazorSample, branch:blazor-server): Blazor Server stöds i .NET 8/9. Information om hur du migrerar det här .NET 7-exemplet finns i Migrera från ASP.NET Core i .NET 7 till .NET 8 och Migrera från ASP.NET Core i .NET 8 till ASP.NET Core i .NET 9.
- 
              CustomElementsBlazorSample (Blazor WebAssembly) (javiercn/CustomElementsBlazorSample, branch:blazor-wasm): Information om hur du migrerar det här .NET 7-exemplet finns i Migrera från ASP.NET Core i .NET 7 till .NET 8 och Migrera från ASP.NET Core i .NET 8 till ASP.NET Core i .NET 9.
Rendera Razor komponenter från JavaScript
Razor komponenter kan återges dynamiskt från JavaScript (JS) för befintliga JS appar.
Exemplet i det här avsnittet återger följande Razor komponent till en sida via JS.
              Quote.razor:
<div class="m-5 p-5">
    <h2>Quote</h2>
    <p>@Text</p>
</div>
@code {
    [Parameter]
    public string? Text { get; set; }
}
              Program Lägg till namnområdet för komponentens plats i filen.
Anropa RegisterForJavaScript appens rotkomponentsamling för att registrera en Razor komponent som en rotkomponent för JS återgivning.
              RegisterForJavaScript innehåller en överlagring som accepterar namnet på en JS funktion som kör initieringslogik (javaScriptInitializer). Funktionen JS anropas en gång för varje komponentregistrering, omedelbart efter att Blazor appen har startat och innan några komponenter återges. Den här funktionen kan användas för integrering med JS tekniker, till exempel anpassade HTML-element eller ett JS-baserat SPA-ramverk.
En eller flera initieringsfunktioner kan skapas och anropas av olika komponentregistreringar. Det vanliga användningsfallet är att återanvända samma initieringsfunktion för flera komponenter, vilket förväntas om initieringsfunktionen konfigurerar integrering med anpassade element eller något annat JS-baserat SPA-ramverk.
Viktigt!
Blanda inte ihop javaScriptInitializer-parametern i RegisterForJavaScript med JavaScript-initierare. Namnet på parametern och JS initieringsfunktionen är en slump.
I följande exempel visas dynamisk registrering av föregående Quote komponent med "quote" som identifierare.
- Ändra anropet till Blazor Server i en AddServerSideBlazor-appens - Program-fil.- builder.Services.AddServerSideBlazor(options => { options.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", javaScriptInitializer: "initializeComponent"); });
- I en Blazor WebAssembly app anropar du RegisterForJavaScript på klientsidans RootComponents-fil - Program.- builder.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", javaScriptInitializer: "initializeComponent");
Koppla initieringsfunktionen med name och parameters funktionsparametrar till window objektet. I demonstrationssyfte loggar följande initializeComponent funktion namnet och parametrarna för den registrerade komponenten.
              wwwroot/jsComponentInitializers.js:
window.initializeComponent = (name, parameters) => {
  console.log({ name: name, parameters: parameters });
}
Rendera komponenten från JS till ett containerelement med hjälp av den registrerade identifieraren och skicka komponentparametrar efter behov.
I följande exempel:
- Komponenten Quote(quoteidentifieraren) återges i elementetquoteContainershowQuotenär funktionen anropas.
- En citatsträng skickas till komponentens Textparameter.
              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);
När skriptetBlazor har lästs in, läs in föregående skript i JSappen:
<script src="_framework/{BLAZOR SCRIPT}"></script>
<script src="jsComponentInitializers.js"></script>
<script src="scripts.js"></script>
I föregående exempel {BLAZOR SCRIPT} är platshållaren skriptet Blazor .
I HTML, placera målcontainer-elementet (quoteContainer). För demonstrationen i det här avsnittet utlöser en knapp återgivning av komponenten Quote genom att anropa showQuoteJS funktionen:
<button id="showQuoteBtn">Show Quote</button>
<div id="quoteContainer"></div>
Vid initiering, innan några komponenter återges, loggar webbläsarens konsol för utvecklingsverktyg komponentens identifierare (Quote) och parametrar (name) när parameters anropas:
Object { name: "quote", parameters: (1) […] }
  name: "quote"
  parameters: Array [ {…} ]
    0: Object { name: "Text", type: "string" }
    length: 1
När Show Quote-knappen har valts, visas komponenten Quote med citatet som är lagrat i Text.
               
              
            
Citat ©1988-1999 Satellite of Love LLC: Mystery Science Theater 3000 (Trace Beaulieu (Crow))
Anmärkning
              rootComponents.add returnerar en instans av komponenten. Anropa instansen dispose för att frigöra den:
const rootComponent = await window.Blazor.rootComponents.add(...);
...
rootComponent.dispose();
Föregående exempel återger dynamiskt rotkomponenten när showQuote()JS funktionen anropas. Om du vill återge en rotkomponent i ett containerelement när Blazor den startas använder du en JavaScript-initierare för att återge komponenten, vilket visas i följande exempel.
Följande exempel bygger på föregående exempel, med hjälp av komponenten Quote , rotkomponentregistreringen Program i filen och initieringen av jsComponentInitializers.js. Funktionen showQuote() (och script.js filen) används inte.
I HTML placerar du målcontainerelementet i quoteContainer2 det här exemplet:
<div id="quoteContainer2"></div>
Med hjälp av en JavaScript-initierare lägger du till rotkomponenten i målcontainerelementet.
              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.'"
    });
}
Anmärkning
För anropet till rootComponents.addanvänder du parametern blazor (i gemener b) som tillhandahålls av starthändelsen Blazor. Även om registreringen är giltig när du använder Blazor-objektet (versaler B), är den bästa metoden att använda parametern.
Ett avancerat exempel med ytterligare funktioner finns i exemplet i BasicTestApp referenskällan ASP.NET Core (dotnet/aspnetcore GitHub-lagringsplats):
Anmärkning
Dokumentationslänkar till .NET-referenskällan läser vanligtvis in lagringsplatsens standardgren, vilket representerar den aktuella utvecklingen för nästa version av .NET. Om du vill välja en tagg för en specifik version använder du listrutan Välj bland grenar eller taggar. Mer information finns i Så här väljer du en versionstagg för ASP.NET Core-källkod (dotnet/AspNetCore.Docs #26205).
Blazor specialanpassade element
Använd Blazor anpassade element för att dynamiskt återge Razor komponenter från olika JavaScript-tekniker, till exempel Angular, React och Vue.
Blazor anpassade element:
- Använd HTML-standardgränssnitt för att implementera anpassade HTML-element.
- Eliminera behovet av att manuellt hantera tillståndet och livscykeln för rotkomponenter Razor med hjälp av JavaScript-API:er.
- Är användbara för att gradvis introducera Razor komponenter i befintliga projekt som skrivits i andra tekniker.
Anpassade element stöder inte underordnat innehåll eller mallkomponenter.
Elementnamn
Enligt HTML-specifikationen måste namn på anpassade elementtagg anta ett kebabfall:
              
              Ogiltig:mycounter
              
              Ogiltig:MY-COUNTER
              
              Ogiltig:MyCounter
              Giltig:my-counter
              Giltig:my-cool-counter
Paket
Lägg till en paketreferens för Microsoft.AspNetCore.Components.CustomElements i appens projektfil.
Anmärkning
Vägledning om hur du lägger till paket i .NET-appar finns i artiklarna under Installera och hantera paket i arbetsflödet för paketförbrukning (NuGet-dokumentation). Bekräfta rätt paketversioner på NuGet.org.
Exempelkomponent
Följande exempel baseras på komponenten Counter från projektmallen Blazor .
              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 registrering
Utför följande steg för att registrera en rotkomponent som ett anpassat element i en Blazor Server app.
Lägg till namnområdet Microsoft.AspNetCore.Components.Web överst i filen Program:
using Microsoft.AspNetCore.Components.Web;
Lägg till ett namnområde för appens komponenter. I följande exempel är BlazorSample appens namnområde och komponenterna finns i Pages mappen:
using BlazorSample.Pages;
Ändra anropet till AddServerSideBlazor. Ange det anpassade elementet med RegisterCustomElement på kretsalternativet RootComponents . I följande exempel registreras komponenten Counter med det anpassade HTML-elementet my-counter:
builder.Services.AddServerSideBlazor(options =>
{
    options.RootComponents.RegisterCustomElement<Counter>("my-counter");
});
Blazor WebAssembly registrering
Utför följande steg för att registrera en rotkomponent som ett anpassat element i en Blazor WebAssembly app.
Lägg till namnområdet Microsoft.AspNetCore.Components.Web överst i filen Program:
using Microsoft.AspNetCore.Components.Web;
Lägg till ett namnområde för appens komponenter. I följande exempel är BlazorSample appens namnområde och komponenterna finns i Pages mappen:
using BlazorSample.Pages;
Anropa RegisterCustomElement på RootComponents. I följande exempel registreras komponenten Counter med det anpassade HTML-elementet my-counter:
builder.RootComponents.RegisterCustomElement<Counter>("my-counter");
Använda det registrerade anpassade elementet
Använd det anpassade elementet med valfritt webbramverk. Till exempel används det föregående my-counter anpassade HTML-elementet som renderar appens Counter komponent i en React-app med följande markering:
<my-counter></my-counter>
Ett fullständigt exempel på hur du skapar anpassade element med Blazorfinns i komponentenCustomElementsComponent i referenskällan.
Anmärkning
Dokumentationslänkar till .NET-referenskällan läser vanligtvis in lagringsplatsens standardgren, vilket representerar den aktuella utvecklingen för nästa version av .NET. Om du vill välja en tagg för en specifik version använder du listrutan Välj bland grenar eller taggar. Mer information finns i Så här väljer du en versionstagg för ASP.NET Core-källkod (dotnet/AspNetCore.Docs #26205).
Skicka parametrar
Skicka parametrar till komponenten Razor antingen som HTML-attribut eller som JavaScript-egenskaper för DOM-elementet.
Följande Counter komponent använder en IncrementAmount parameter för att ange knappens Click me inkrementella mängd.
              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;
    }
}
Rendera komponenten Counter med det anpassade elementet och skicka ett värde till parametern IncrementAmount som ett HTML-attribut. Attributets namn antar syntax för kebabfall (increment-amount, inte IncrementAmount):
<my-counter increment-amount="10"></my-counter>
Du kan också ange parameterns värde som en JavaScript-egenskap för elementobjektet. Egenskapsnamnet använder camel case-syntax (incrementAmount, inte IncrementAmount):
const elem = document.querySelector("my-counter");
elem.incrementAmount = 10;
Du kan uppdatera parametervärden när som helst med antingen attribut- eller egenskapssyntax.
Parametertyper som stöds:
- Med javascript-egenskapssyntax kan du skicka objekt av valfri JSON-serialiserbar typ.
- Med HJÄLP av HTML-attribut är du begränsad till att skicka objekt av sträng-, boolesk- eller numeriska typer.
              Experimentellt stöd är tillgängligt för att skapa anpassade element med hjälp av Microsoft.AspNetCore.Components.CustomElements NuGet-paketet. Anpassade element använder HTML-standardgränssnitt för att implementera anpassade HTML-element.
Varning
Experimentella funktioner tillhandahålls för att utforska funktionskraft och kanske inte levereras i en stabil version.
Registrera en rotkomponent som ett anpassat element:
- I en Blazor Server app ändrar du anropet till AddServerSideBlazor i - Programfilen för att anropa RegisterCustomElement på CircuitOptions.RootComponents:- builder.Services.AddServerSideBlazor(options => { options.RootComponents.RegisterCustomElement<Counter>("my-counter"); });- Anmärkning - Föregående kodexempel kräver ett namnområde för appens komponenter (till exempel - using BlazorSample.Components.Pages;) i- Programfilen.
- I en Blazor WebAssembly app, anropa RegisterCustomElement på WebAssemblyHostBuilder.RootComponents i - Programfilen:- builder.RootComponents.RegisterCustomElement<Counter>("my-counter");- Anmärkning - Föregående kodexempel kräver ett namnområde för appens komponenter (till exempel - using BlazorSample.Components.Pages;) i- Programfilen.
Inkludera följande <script> tagg i appens HTML-kod föreBlazor skripttaggen:
<script src="/_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script>
Använd det anpassade elementet med valfritt webbramverk. Till exempel används det tidigare anpassade räknarelementet i en React-app med följande markering:
<my-counter increment-amount={incrementAmount}></my-counter>
Varning
Funktionen för anpassade element är för närvarande experimentell, stöds inte och kan ändras eller tas bort när som helst. Vi välkomnar din feedback om hur väl den här metoden uppfyller dina krav.
Generera Angular- och React-komponenter
Generera JavaScript-komponenter (JS) från Razor komponenter för JavaScript-tekniker, till exempel Angular eller React. Den här funktionen ingår inte i .NET, men aktiveras av stöd för rendering Razor av komponenter från JS. 
              KomponentgenereringsexempletJS på GitHub visar hur du genererar Angular- och React-komponenter från Razor komponenter. Mer information finns i GitHub-exempelappens README.md fil.
Varning
Komponentfunktionerna Angular och React är för närvarande experimentella, stöds inte och kan ändras eller tas bort när som helst. Vi välkomnar din feedback om hur väl den här metoden uppfyller dina krav.
ASP.NET Core