在 Blazor 应用程序中自动注入 javascript
Auto inject javascript in blazor application
我正在开发 Blazor 扩展库。
这个库中的一件事是重用 javascript alert() 方法。
我知道该怎么做,这涉及在 .cshtml 页面中添加:
<script>
Blazor.registerFunction('Alert', (message) => {
alert(message);
});
</script>
这在我的代码中:
public void Alert(string message)
{
RegisteredFunction.Invoke<object>("Alert", message);
}
如果您使用我的包(或者可能总是),我希望 javascript 部分以某种方式自动注入到 html 中。不确定这是否可行(还)
对此有什么想法吗?
编辑
自 blazor 0.2 以来,有一种更受支持的方法来执行此操作。以 blazorlib 模板为例:
dotnet new -i Microsoft.AspNetCore.Blazor.Templates
dotnet new blazorlib
0.1 个回答
我最终创建了我自己的 blazor 组件,其中包含我的 javascript,如下所示:
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>
我正在开发 Blazor 扩展库。
这个库中的一件事是重用 javascript alert() 方法。 我知道该怎么做,这涉及在 .cshtml 页面中添加:
<script>
Blazor.registerFunction('Alert', (message) => {
alert(message);
});
</script>
这在我的代码中:
public void Alert(string message)
{
RegisteredFunction.Invoke<object>("Alert", message);
}
如果您使用我的包(或者可能总是),我希望 javascript 部分以某种方式自动注入到 html 中。不确定这是否可行(还)
对此有什么想法吗?
编辑
自 blazor 0.2 以来,有一种更受支持的方法来执行此操作。以 blazorlib 模板为例:
dotnet new -i Microsoft.AspNetCore.Blazor.Templates
dotnet new blazorlib
0.1 个回答
我最终创建了我自己的 blazor 组件,其中包含我的 javascript,如下所示:
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>