Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 10 deste artigo.
Este artigo aborda como renderizar Razor componentes de JavaScript, usar Blazor elementos personalizados e gerar componentes Angular e React.
Observação
Recomendamos usar os scripts blazor.server.js (Blazor Server) e blazor.webassembly.js (Blazor WebAssembly) ao integrar componentes Razor numa aplicação JavaScript existente até que melhor suporte para o script blazor.web.js (Blazor Web App) seja acrescentado no futuro. Para obter mais informações, consulte RegisterCustomElement parou de funcionar em Blazor 8 (dotnet/aspnetcore #53920).
Aplicações de exemplo Angular
As seguintes aplicações de exemplo demonstram como renderizar um Razor componente como elementoBlazor personalizado numa aplicação Angular:
-
CustomElementsBlazorSample (Blazor Server) (
javiercn/CustomElementsBlazorSamplerepositório GitHub, ramo:blazor-server) -
CustomElementsBlazorSample (Blazor WebAssembly) (
javiercn/CustomElementsBlazorSamplerepositório GitHub, ramo:blazor-wasm)
Para migrar qualquer um destes exemplos de .NET 7, consulte os seguintes recursos:
- Migrar do ASP.NET Core no .NET 7 para o .NET 8
- Migrar do ASP.NET Core em .NET 8 para ASP.NET Core em .NET 9
- Migrar de ASP.NET Core em .NET 9 para ASP.NET Core em .NET 10
As principais atualizações a fazer são:
Atualize os nomes do framework de destino (TFMs) para a versão mais recente.
Atualize as referências dos pacotes .NET e as dependências do Angular para as suas versões mais recentes.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Renderizar Razor componentes a partir de JavaScript
Os Razor componentes podem ser dinamicamente renderizados a partir do JavaScript (JS) para aplicações existentes JS.
O exemplo nesta seção renderiza o componente a seguir Razor em uma página 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 No arquivo, adicione o namespace para o local do componente.
Chame RegisterForJavaScript na coleção de componentes raiz do aplicativo para registar um componente Razor como componente raiz para a renderização de JS.
RegisterForJavaScript inclui uma sobrecarga que aceita o nome de uma JS função que executa a lógica de inicialização (javaScriptInitializer). A JS função é chamada uma vez por registro de componente imediatamente após o início do Blazor aplicativo e antes que quaisquer componentes sejam renderizados. Esta função pode ser usada para integração com tecnologias JS, como elementos personalizados HTML ou uma estrutura SPA baseada em JS.
Uma ou mais funções do inicializador podem ser criadas e chamadas por diferentes registros de componentes. O caso de uso típico é reutilizar a mesma função de inicializador para vários componentes, o que é esperado se a função de inicializador estiver configurando a integração com elementos personalizados ou outra estrutura SPA baseada em JS.
Importante
Não confunda o javaScriptInitializer parâmetro de RegisterForJavaScript com os inicializadores JavaScript. O nome do parâmetro e o JS recurso inicializadores são coincidências.
O exemplo a seguir demonstra o registro dinâmico do componente anterior Quote com "quote" como identificador.
Em uma Blazor Server aplicação, modifique a chamada para AddServerSideBlazor no arquivo
Program.builder.Services.AddServerSideBlazor(options => { options.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", javaScriptInitializer: "initializeComponent"); });Em uma Blazor WebAssembly aplicação, chame RegisterForJavaScript em RootComponents no ficheiro do lado do cliente
Program.builder.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", javaScriptInitializer: "initializeComponent");
Anexe a função de inicialização com os parâmetros de função name e parameters ao objeto window. Para fins de demonstração, a função a seguir initializeComponent registra o nome e os parâmetros do componente registrado.
wwwroot/jsComponentInitializers.js:
window.initializeComponent = (name, parameters) => {
console.log({ name: name, parameters: parameters });
}
Renderizar o componente do JS em um elemento de contêiner usando o identificador registado, passando os parâmetros do componente conforme necessário.
No exemplo a seguir:
- O componente
Quote(identificadorquote) é renderizado no elementoquoteContainerquando a funçãoshowQuoteé chamada. - Uma string de citação é passada para o parâmetro do componente
Text.
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);
Depois que o Blazor script for carregado, carregue os scripts precedentes na JS aplicação.
<script src="_framework/{BLAZOR SCRIPT}"></script>
<script src="jsComponentInitializers.js"></script>
<script src="scripts.js"></script>
No exemplo anterior, o placeholder {BLAZOR SCRIPT} é o Blazor script.
Em HTML, coloque o elemento container de destino (quoteContainer). Para a demonstração nesta seção, um botão aciona a renderização do Quote componente chamando a showQuoteJS função:
<button id="showQuoteBtn">Show Quote</button>
<div id="quoteContainer"></div>
Na inicialização, antes de qualquer componente ser renderizado, o console de ferramentas de desenvolvedor do navegador registra o identificador (Quote) e os name parâmetros (parameters) do componente quando initializeComponent é chamado:
Object { name: "quote", parameters: (1) […] }
name: "quote"
parameters: Array [ {…} ]
0: Object { name: "Text", type: "string" }
length: 1
Quando o botão Show Quote é selecionado, o componente Quote é renderizado com a cotação armazenada em Text exibida:
Citação ©1988-1999 Satellite of Love LLC: Mystery Science Theater 3000 (Trace Beaulieu (Corvo))
Observação
rootComponents.add retorna uma instância do componente. Chame dispose na instância para liberá-la:
const rootComponent = await window.Blazor.rootComponents.add(...);
...
rootComponent.dispose();
O exemplo anterior renderiza dinamicamente o componente raiz quando a showQuote()JS função é chamada. Para renderizar um componente raiz em um elemento container quando Blazor é iniciado, use um inicializador JavaScript para renderizar o componente, como demonstra o exemplo a seguir.
O exemplo a seguir baseia-se no exemplo anterior, usando o componente Quote, o registo do componente raiz no arquivo Program e a inicialização do jsComponentInitializers.js. A showQuote() função (e o script.js arquivo) não são usados.
Em HTML, coloque o elemento container de destino, quoteContainer2 para este exemplo:
<div id="quoteContainer2"></div>
Usando um inicializador JavaScript, adicione o componente raiz ao elemento de contêiner de destino.
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.'"
});
}
Observação
Para a chamada para rootComponents.add, use o parâmetro blazor (letra minúscula b) fornecido pelo evento de início Blazor. Embora o registro seja válido ao usar o objeto Blazor (maiúsculas B), a abordagem preferida é usar o parâmetro.
Para obter um exemplo avançado com recursos adicionais, consulte o exemplo na BasicTestApp fonte de referência do ASP.NET Core (dotnet/aspnetcore repositório GitHub):
Observação
Os links de documentação para a fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma tag para uma versão específica, use a lista suspensa Alternar entre ramificações ou tags. Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Blazor elementos personalizados
Use Blazor elementos personalizados para renderizar Razor dinamicamente componentes de diferentes tecnologias JavaScript, como Angular, React e Vue.
Blazor Elementos personalizados:
- Utilize interfaces HTML padrão para implementar elementos HTML personalizados.
- Elimine a necessidade de gerenciar manualmente o estado e o ciclo de vida dos componentes raiz Razor usando APIs JavaScript.
- São úteis para gradualmente introduzir componentes Razor em projetos existentes escritos em outras tecnologias.
Os elementos personalizados não suportam conteúdo filho ou componentes modelados.
Nome do elemento
De acordo com a especificação HTML, os nomes das tags de elementos personalizados devem adotar o formato kebab case:
Inválido:mycounter
Inválido:MY-COUNTER
Inválido:MyCounter
Validade:my-counter
Validade:my-cool-counter
Embalagem
Adicione uma referência de pacote para Microsoft.AspNetCore.Components.CustomElements o arquivo de projeto do aplicativo.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Componente de exemplo
Os seguintes exemplos são baseados no componente do modelo de projeto CounterBlazor.
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 Registo
Siga as etapas a seguir para registrar um componente raiz como um elemento personalizado em um Blazor Server aplicativo.
Adicione o Microsoft.AspNetCore.Components.Web namespace à parte superior do Program arquivo:
using Microsoft.AspNetCore.Components.Web;
Adicione um namespace para os componentes do aplicativo. No exemplo a seguir, o namespace do aplicativo é BlazorSample e os componentes estão localizados na Pages pasta:
using BlazorSample.Pages;
Modifique a chamada para AddServerSideBlazor. Especifique o elemento personalizado na opção RegisterCustomElement do circuito RootComponents. O exemplo a seguir regista o componente Counter com o elemento HTML my-counter personalizado:
builder.Services.AddServerSideBlazor(options =>
{
options.RootComponents.RegisterCustomElement<Counter>("my-counter");
});
Blazor WebAssembly Registo
Registar um componente raiz como elemento personalizado numa Blazor WebAssembly aplicação. No exemplo seguinte, o código:
- Adiciona um namespace para os componentes da aplicação. No exemplo, o namespace da aplicação é
BlazorSample, e os componentes estão localizados naPagespasta. - Fornece acesso à API no Microsoft.AspNetCore.Components.Web namespace.
- Chama RegisterCustomElement em RootComponents para registar o componente
Countercom o elemento HTML personalizadomy-counter.
using BlazorSample.Pages;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.RegisterCustomElement<Counter>("my-counter");
await builder.Build().RunAsync();
Usar o elemento personalizado registrado
Use o elemento personalizado com qualquer estrutura da Web. Por exemplo, o elemento HTML personalizado my-counter que renderiza o componente Counter da aplicação é usado numa aplicação React com a seguinte marcação:
<my-counter></my-counter>
Para obter um exemplo completo de como criar elementos personalizados com Blazor, consulte o componente CustomElementsComponent na fonte de referência.
Observação
Os links de documentação para a fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma tag para uma versão específica, use a lista suspensa Alternar entre ramificações ou tags. Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Transmitir parâmetros
Passe parâmetros para seu Razor componente como atributos HTML ou como propriedades JavaScript no elemento DOM.
O componente a seguir Counter usa um IncrementAmount parâmetro para definir a quantidade de incremento do Click me botão.
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;
}
}
Renderizar o componente Counter com o elemento personalizado e atribuir um valor ao parâmetro IncrementAmount como um atributo HTML. O nome do atributo adota a sintaxe kebab-case (increment-amount, não IncrementAmount):
<my-counter increment-amount="10"></my-counter>
Como alternativa, você pode definir o valor do parâmetro como uma propriedade JavaScript no objeto do elemento. O nome da propriedade adota a sintaxe camel case (incrementAmount, não IncrementAmount):
const elem = document.querySelector("my-counter");
elem.incrementAmount = 10;
Você pode atualizar os valores dos parâmetros a qualquer momento usando a sintaxe de atributo ou propriedade.
Tipos de parâmetros suportados:
- Usando a sintaxe de propriedades do JavaScript, pode-se passar objetos de qualquer tipo serializável em JSON.
- Usando atributos HTML, você está limitado a passar objetos de string, booleano ou tipos numéricos.
O suporte experimental está disponível para a criação de elementos personalizados usando o Microsoft.AspNetCore.Components.CustomElements pacote NuGet. Os elementos personalizados usam interfaces HTML padrão para implementar elementos HTML personalizados.
Advertência
Os recursos experimentais são fornecidos com a finalidade de explorar a viabilidade do recurso e não podem ser enviados em uma versão estável.
Registre um componente raiz como um elemento personalizado:
Em uma Blazor Server aplicação, modifique a chamada para AddServerSideBlazor no ficheiro
Programpara chamar RegisterCustomElement em CircuitOptions.RootComponents.builder.Services.AddServerSideBlazor(options => { options.RootComponents.RegisterCustomElement<Counter>("my-counter"); });Observação
O exemplo de código anterior requer um namespace para os componentes do aplicativo (por exemplo,
using BlazorSample.Components.Pages;) noProgramarquivo.Em uma Blazor WebAssembly aplicação, chame RegisterCustomElement em WebAssemblyHostBuilder.RootComponents no ficheiro
Program.builder.RootComponents.RegisterCustomElement<Counter>("my-counter");Observação
O exemplo de código anterior requer um namespace para os componentes do aplicativo (por exemplo,
using BlazorSample.Components.Pages;) noProgramarquivo.
Inclua a seguinte <script> tag no HTML do aplicativo antes da Blazor tag de script:
<script src="/_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script>
Use o elemento personalizado com qualquer estrutura da Web. Por exemplo, o elemento personalizado do contador anterior é usado em um aplicativo React com a seguinte marcação:
<my-counter increment-amount={incrementAmount}></my-counter>
Advertência
O recurso de elementos personalizados é atualmente experimental, não tem suporte e está sujeito a alterações ou ser removido a qualquer momento. Agradecemos o seu feedback sobre o quão bem esta abordagem específica atende às suas necessidades.
Gerar componentes Angular e React
Gere componentes JavaScript (JS) a partir de Razor componentes para tecnologias JavaScript, como Angular ou React. Essa funcionalidade não está incluída no .NET, mas é ativada pelo suporte para renderização de componentes Razor do JS. O JS exemplo de geração de componentes no GitHub demonstra como gerar componentes Angular e React a partir de Razor componentes. Consulte o arquivo do README.md aplicativo de exemplo GitHub para obter informações adicionais.
Advertência
Os recursos dos componentes Angular e React são atualmente experimentais, sem suporte e estão sujeitos a alterações ou serem removidos a qualquer momento. Agradecemos o seu feedback sobre o quão bem esta abordagem específica atende às suas necessidades.