在 Blazor 应用程序中自动注入 javascript

Posted

技术标签:

【中文标题】在 Blazor 应用程序中自动注入 javascript【英文标题】:Auto inject javascript in blazor application 【发布时间】:2018-09-05 11:36:19 【问题描述】:

我正在开发 Blazor 扩展库。

这个库中的一件事是重用 javascript alert() 方法。 我知道怎么做,这涉及在 .cshtml 页面中添加它:

<script>
  Blazor.registerFunction('Alert', (message) => 
      alert(message);
  );
</script>

这在我的代码中:

public void Alert(string message)

     RegisteredFunction.Invoke<object>("Alert", message);

如果您使用我的包(或者可能总是),我希望 javascript 部分以某种方式自动注入到 html 中。不确定这是否可能(还)

对此有什么想法吗?

【问题讨论】:

也许通过使用 nuget 安装脚本 【参考方案1】:

编辑

自 blazor 0.2 以来,有一种更受支持的方式来执行此操作。以 blazorlib 模板为例:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates

dotnet new blazorlib

0.1 个答案

我最终创建了包含我的 javascript 的自己的 blazor 组件,如下所示:

public class BlazorExtensionScripts : Microsoft.AspNetCore.Blazor.Components.BlazorComponent


    protected override void BuildRenderTree(Microsoft.AspNetCore.Blazor.RenderTree.RenderTreeBuilder builder)
    
        builder.OpenElement(0, "script");
        builder.AddContent(1, "Blazor.registerFunction('Alert', (message) =>  alert(message); );");
        builder.CloseElement();
    

然后像这样将它添加到我的 app.cshtml 中:

@addTagHelper *, BlazorExtensions

<Router AppAssembly=typeof(Program).Assembly />

<BlazorExtensionScripts></BlazorExtensionScripts>

【讨论】:

您能否解释一下@addTagHelper 在 Blazor 中的工作方式 这是因为我的组件位于另一个程序集中。这是一种解决方法:github.com/aspnet/Blazor/issues/394 Balzor.registerFunction 不应直接在razorcomponent 中使用。当您重新使用该组件时,您将遇到问题。更多信息github.com/aspnet/Blazor/issues/451 其实这里暴露的方法应该还是可以的,因为标签在Router标签下,应该在启动时调用一次。另外我想我们可以假设这段代码应该被调用一次,我们可以添加一个静态布尔标记,表明该组件已经初始化。 另外,在我自己的项目扩展方面,我创建了一个小工具 (github.com/Daddoon/Daddoon.Blazor/tree/master/…),它读取为输入 args .js 文件,并输出一个类似 .cs 文件的 BlazorComponent。当然适合我的项目。在开发过程中,您可以使用像这样的简单策略来维护 Blazor .cs 文件之外的所有 js 脚本代码。您只需在包扩展项目的 PreBuild 事件上调用 JstoCsharp 工具。

以上是关于在 Blazor 应用程序中自动注入 javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Blazor 类中注入服务(AuthenticationStateProvider)

Blazor 应用程序作为 WASM 或服务器运行。无法让依赖注入在服务器模式下工作

Blazor University (47)依赖注入 —— Singleton 依赖

带有私有 NuGet 包的 Blazor 依赖项注入和 EF/DbContext

Blazor、对象生命周期和依赖注入

如何在 Blazor 的 Javascript 中获取/注入 onclick 句柄