我有一个javascript事件叫做Hello:
addEventListener('hello', function () {
alert("event listener");
})
在另一个javascript函数中,我引发了这个事件:
let event = new Event("hello", { bubbles: true });
document.dispatchEvent(event);
我现在要做的是让事件在一个JavaScript函数中触发,Blazor应该监听事件,而不是JavaScript调用Blazor方法。
希望有人能帮助我。
向我致意,
2条答案
按热度按时间kiz8lqtg1#
对于自定义事件,您需要手动使用JavaScript/.NET interoperability。
使用示例方法调用方法:
invokeMethod
或invokeMethodAsync
函数调用示例上的. NET示例方法。从JavaScript调用其他. NET方法时,也可以将. NET示例作为参数传递。示例
注意,这是一个非常简化的示例。您可能想添加一些东西;从互操作类to avoid memory leaks上的
IDisposable
开始。1.在C#中,创建一个helper类来管理互操作:
1.在Blazor组件中,添加interop类的示例(
Interop
),并添加本地方法作为回调(HandleCustomEvent
):1.在JavaScript中,添加一个引用
DotNetObjectReference
并可以调用C#中的interop的方法:如果使用TypeScript,您可以查看此GitHub问题。
vwkv1x7d2#
对于任何想知道@Mister Magoo提出的解决方案不再是. NET 6的预览版的人来说,这里提供了一些示例。
简而言之:
创建一个具有EventHandlerAttribute的C#类:
在
./wwwroot/index.html
内部和<script src="_framework/blazor.webview.js" autostart="false"></script>
之后添加JS:在你的剃刀:
最后,在JS中,您可以分派事件:
不要犯和我一样的错误,C#中的事件名称应该以"on"开头(JS:"cityclicked",C#:"oncityclicked")。