【发布时间】:2021-10-10 07:49:35
【问题描述】:
这是我想要实现的目标:
我在 Blazor WASM 项目中有一个(普通)类。我想从我的类中调用一个 JavaScript 函数。 如果我想从 Razor 组件执行此操作,它工作正常,我将 IJSruntime 和 invokevoidasync 注入我的 JavaScript。
但是当我尝试在课堂上这样做时会出错。 首先我尝试像这样注入它:
[Inject]
IJSRuntime JSRuntime { get; set; }
但最终出现错误消息:值不能为空。 (参数'jsRuntime') 我从this 帖子中了解到我必须“以传统方式注入它”,所以我这样做了:
public class InvokeJavaScript
{
private readonly IJSRuntime jSRuntime;
public InvokeJavaScript(IJSRuntime jSRuntime)
{
this.jSRuntime = jSRuntime;
}
public async void InvokeMyJs()
{
await jSRuntime.InvokeVoidAsync("giveMeAMessage");
}
}
但从那时起我就被卡住了,我知道这一定是一些关键的 .NET 知识,但我在这里遗漏了一部分。我想调用“InvokeMyJs”方法,例如:
InvokeJavaScript ij = new InvokeJavaScript();
ij.InvokeMyJs();
但是知道我遇到了一个错误:没有给出与“InvokeJavaScript.InvokeJavaScript(IJSRuntime)”所需的形参“jSRuntime”相对应的参数
我得到错误对我来说很有意义,但我不知道如何修复它,我必须向 InvokeJavaScript(IJSRuntime jSRuntime) 发送什么参数以及如何正确执行?谁能举个例子?
【问题讨论】:
-
您需要提供您的班级
InvokeJavaScript进行注入。类似services.AddScoped<InvokeJavaScript>().... -
好的,我将它添加到我的启动课程中,但是如何从那里开始?
-
这个类然后是可注入的。然后你可以将它注入到任何你想要的组件中。
-
另外,请注意
async void。最好将其设为async Task并等待它,除非您非常确定您需要开火&忘记模式。
标签: javascript dependency-injection blazor webassembly