Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

365
Visualizações
Blazor: cargue el archivo JS en el componente secundario y exponga sus métodos

La pregunta

Estoy tratando de cargar un archivo JavaScript en un componente secundario y exponer sus métodos al principal. Pude cargar el archivo, pero cada vez que intento usar mis métodos fuera del componente secundario, aparece un error. He proporcionado un ejemplo mínimo como referencia.

Realmente estoy atascado con la razón por la que esto no funciona ... Mi opinión es que tiene algo que ver con que el componente secundario no se represente por completo. Y no estoy muy seguro de cómo solucionarlo.

Ejemplo mínimo

Página

 // Page.razor <ChildComponent @ref="Ref" /> @code { private ChildComponent Ref; protected override async Task OnAfterRenderAsync() { await Ref.Test(); } }

Componente hijo

 // ChildComponent.razor @inject IJSRuntime JS @code { private IJSObjectReference Module; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { Module = await JS.InvokeAsync<IJSObjectReference>("import", "./ChildComponent.razor.js"); } } public async Task Test() { await Module.InvokeVoidAsync("Test"); } }
 // ChildComponent.razor.js export function Test() { alert("Hello world!"); }

Error

Error

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

En este componente cargo dinámicamente el '.js'.

Nota: Este componente existe en un RCL llamado "ChatClient.Core". El archivo .js se coloca dentro de la carpeta wwwroot wwwroot/scripts del RCL.

 public partial class Dialog : ComponentBase, IAsyncDisposable { private readonly Lazy<Task<IJSObjectReference>> moduleTask; private DotNetObjectReference<Dialog> dotNetObjectReference; private ElementReference dialogElement; public Dialog() { moduleTask = new(() => jsRuntime!.InvokeAsync<IJSObjectReference>( identifier: "import", args: "./_content/ChatClient.Core/scripts/dialogJsInterop.js") .AsTask()); dotNetObjectReference = DotNetObjectReference.Create(this); } [Inject] private IJSRuntime jsRuntime { get; set; } ... public async ValueTask ShowDialogAsync() { var module = await moduleTask.Value; await module.InvokeVoidAsync(identifier: "showDialog", dialogElement, dotNetObjectReference); } ... public async ValueTask DisposeAsync() { if (moduleTask.IsValueCreated) { var module = await moduleTask.Value; await module.DisposeAsync(); } } }
 export function showDialog(element, parm) { let dialog = element; let dotNetHelper = parm; dialog.addEventListener('close', () => { dotNetHelper.invokeMethodAsync('OnDialogClosed'); }); return element.showModal(); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda