当前位置: 首页 > news >正文

BootstrapBlazor与JS互调

记录

这个框架目前JS的调用要成功实现

  1. 用它提供的JSRuntime扩展
  2. 用非常复杂的原生实现的方式

方式1

参考JSRuntime扩展的描述
首先

[Inject]
[NotNull]
private IJSRuntime? JSRuntime { get; set; }[NotNull]
private JSModule? Module { get; set; }protected override async Task OnAfterRenderAsync(bool firstRender)
{await base.OnAfterRenderAsync(firstRender);if (firstRender){Module = await JSRuntime.LoadUtility();}
}

然后,注意,这个鸟玩意需要将JS代码以字符串的形式写到C#里,我试了好像只能固定的以一个字符串的形式写死,直接读取JS脚本文件成字符串进来也不行。然后如果需要传参,需要注意转移字符的问题。
用的是这个接口,Function接口,它有支持传入参数的功能,我是弄了半天也没明白怎么用,就是不起作用,例子也没有说这个传参是怎么操作的。
在这里插入图片描述

譬如,我下面的这段代码,我希望操作页面中的的链接元素,实现某个功能

    private async Task SetHrefEnableAsync(string name,bool flg){string selector = @"'a.nav-link[href*=""name""]'";string enable = flg.ToString().ToLower();if(Module!=null){await Module.Function($@"const links = document.querySelectorAll({selector});links.forEach(link => {{if ({enable}) {{console.log('启用逻辑')}} else {{console.log('禁用逻辑')}}}});");}}

这个需要自己解决转移字符的问题,注意加$@来处理转移字符,并且将涉及到的花括号双倍写,然后将自己传入参数的变量名zi
跑出来。

方式2

原生Blazor实现
步骤大概是这样

  1. 写好JS脚本放在wwwroot/js/下
  2. index.html需要引入这个自定义的JS脚本
  3. Blazor组件这边,给个参考范例,参考这样写
@inject IJSRuntime JSRuntime
@implements IAsyncDisposable@code {private IJSObjectReference? _jsModule;private DotNetObjectReference<JSHandler>? _dotnetHelper;protected override async Task OnAfterRenderAsync(bool firstRender){if (firstRender){_dotnetHelper = DotNetObjectReference.Create(this);_jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>("import", "./js/xxx.js"); // 对应 JS 文件路径await _jsModule.InvokeVoidAsync("jsfunc2", _dotnetHelper);}}public async ValueTask DisposeAsync(){if (_jsModule != null){await _jsModule.InvokeVoidAsync("jsfunc1");await _jsModule.DisposeAsync();}_dotnetHelper?.Dispose();}
}// JSHandler.cs
public class JSHandler: IDisposable
{private readonly Func<Task> _x;public JSHandler(Func<Task> x){_x = x;}// 被 JavaScript 调用的方法[JSInvokable]public async Task JsCallDotnetFunc(){await _x.Invoke();}// 释放资源public void Dispose(){// 清理逻辑(如有)}
}

这里jsfunc1,jsfunc2对应的是JS脚本里的自定义函数,JSHandler是C#侧自定义操作JS的类
END

http://www.lryc.cn/news/585537.html

相关文章:

  • Semi-Supervised Single-View 3D Reconstruction via Prototype Shape Priors
  • 小智AI模型接入MCP
  • 【一起来学AI大模型】微调技术:LoRA(Low-Rank Adaptation) 的实战应用
  • SQL Server通过CLR连接InfluxDB实现异构数据关联查询技术指南
  • SpringBoot JWT
  • Rust与UE5高效集成实战
  • uniapp制作一个个人页面
  • ffmpeg-api记录
  • UC浏览器PC版自2016年后未再更新不支持vue3
  • 小旺AI截图1.2.1版本上线:新增录屏音频、Mac长截屏
  • Docker高级管理--Dockerfile 镜像制作
  • 手把手一起使用Miniforge3+mamba平替Anaconda(Win10)
  • 机器学习week2-线性回归加强
  • Java的extends通配符
  • netdxf—— CAD c#二次开发之(netDxf 处理 DXF 文件)
  • 和鲸社区深度学习基础训练营2025年关卡2(3)pytorch
  • 利用Claude code,只用文字版系统设计大纲,就能轻松实现系统~
  • 免费应用分发平台的安全漏洞和防护机制是什么?
  • 60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)
  • Windows解决 ping 127.0.0.1 一般故障问题
  • 【Linux网络】深入理解HTTP/HTTPS协议:原理、实现与加密机制全面解析
  • 信号量机制
  • 聊聊AI大模型的上下文工程(Context Engineering)
  • Spring 声明式事务:从原理到实现的完整解析
  • 运行ssh -T git@github.com报错
  • 多端协作白板:如何改变传统会议模式!
  • 设计模式 - 面向对象原则:SOLID最佳实践
  • 多态 使用场景
  • 【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南
  • VOB如何转换成MP4格式?3种快速转换教程推荐