Blazor其实也是支持与js进行互动的,互动方式也相当的简单,只是有些东西并没有csharp版本的实现,比如富文本编辑器,代码高亮这些,现在流行的都是js版本,所以在blazor中使用时就不得不与js互动,联合完成任务,但是其中要注意的时,如果页面修改了,会触发blazor的页面更新机制,会导致js的代码高亮等与blazor框架冲突,为了解决这些问题,必须要通过blazor调用js更新页面这种方式,代码如下:
highlight的官网是:
https://highlightjs.org/
由于我使用的是highlight代码高亮,所以这里导入这个代码高亮的js代码,这部分要卸载.cshtml中,必须静态输出到html中
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/languages/json.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/languages/javascript.min.js"></script>
然后再写一个js代码放在wwwroot文件夹下的某个位置,代码如下:
window.SetHighLigh = function () {
hljs.highlightAll();
console.log(hljs)
for (let code of document.querySelectorAll('.hljs')) {
hljs.highlightElement(code);
}
}
然后在需要代码高亮的组件中直接调用即可实现代码高亮并且避免dom冲突
protected override async void OnAfterRender(bool firstRender)
{
base.OnAfterRender(firstRender);
await JS.InvokeVoidAsync("import", "SetHighLigh.js所在的相对url位置");
await JS.InvokeVoidAsync("SetHighLigh");
}