HtmlEditor在Blazor中编写
目录
介绍
挑战性
仔细看看HtmlEditableContent
使用代码
现在怎么办
安装
尽管可以在Blazor项目中使用HTML编辑器,如TinyMC(通过包装JavaScript代码),但建议改用本地的Blazor组件。该代码旨在显示如何在Blazor中实现HTML编辑器。主要目标是研究这些挑战,而不是创建在每个浏览器中都经过测试的功能强大的编辑器。
- 下载源代码321.3 KB
介绍
步骤如下:项目HTMBuilder是具有核心编辑器功能的类库。那是纯净的.NET,没有UI,带有附带的测试项目。
该HTMLEditableContent项目是Blazor组件,带有一个ContentEditable div。它要求HtmlBuilder在contentEditable div中渲染HTML 。
BlazorHtmlEditor是围绕HtmlEditableContent构建的Blazor组件。UI外壳使用MatBlazor(Blazor的Material Design)进行编程。
选择该设计是因为您可以用自己的组件替换每个组件。如果您不希望使用Material Design编辑器,则可以构建自己的UI Shell。如果只需要逻辑,则HTMLBuilder足够了。
该代码完全基于AngleSharp。展示HTML文档的.NET库。
挑战性
最大的挑战是Blazor绑定与ContentEditable HTML元素的结合。首先,我使用绑定。AngleSharp生成的HTML通过MarkUpString绑定到HTML元素。
问题是浏览器以类似MutationObserver的方式在contenteditable元素中实现更改。Blazor通过绑定更新了HTML后,浏览器会看到该元素已更改,然后也开始工作。解决该问题的唯一方法不是使用Blazor绑定,而是通过Interop通过JavaScript更新HTML元素。
另一个问题是Editor Blazor组件和HtmlEditableContent Blazor组件必须相互通信。例如,编辑器要显示光标位置的变化。如果通过参数绑定实现此链接,Blazor会将任何光标位置更改都视为参数更改,包括渲染。你根本不想要那个。
这是通过在Editor和HtmlEditableContent组件之间放置一个共享类来解决的。编辑器在static dictionary中中注册一个编辑器接口,EditableContent在另一个Htmlbuilder interface中注册一个static dictionary。dictionary将两个组件之间被共享。无论是Editor与Content组件具有ID属性(Guid),并且它是共享的(通过参数)。因为它们具有相同的键,所以它们可以在共享库中请求彼此的接口,而不会进行任何渲染。这不是理想的方法,但是可以。
仔细看看HtmlEditableContent
如果用户在浏览器中更改光标或选择,则这些位置更改将通过JavaScript传递给Blazor组件。内容更改不会立即传达。
如果.NET端必须执行操作,它将向浏览器询问位置和内容(innerHTML)。然后,AngleSharp解析文档并执行操作。结果是新的HTML内容。通过JavaScript,将旧内容替换为新内容,并恢复光标选择位置。
此设置限制了JavaScript与Blazor端之间的交互次数。位置变动是个例外。
使用代码
警告:所有项目都是实验性的。目的只是演示如何在Blazor中构建一个HtmlEditor。例如,我没有花时间完全熟悉AngleSharp,也没有花时间编写功能齐全的HTML编辑器。另外,我也没有在所有浏览器中测试所有内容。这需要更多时间。我主要关心的是构建Blazor HTML编辑器时遇到的挑战。
该代码非常易于使用。
//
<BlazorHtmlEditor.HtmlEditor BlockStylings="@BlockStylings"></BlazorHtmlEditor.HtmlEditor>
//
在BlockStyling参数中,传递类似H1和H2的样式。还有通过Colors和FontStyling的可能性。HtmlEditors使用默认设置,如果你不为他们提供设置。
现在怎么办
学习代码,自己玩,改进和扩展,提出建议,改善UI等。尽管遇到了种种困难,但与Blazor合作仍然是一种荣幸。
安装
解压缩该zip文件。执行:
dotnet restore
将活动目录更改为HtmlEditablContent。运行:
npm install
运行:
npm run build:debug
HtmlEditor在Blazor中编写相关推荐
- interop_如何在Blazor中实现JavaScript Interop
interop 介绍 (Introduction) In this article, we will learn about JavaScript Interop in Blazor. We will ...
- 在Blazor中构建数据库应用程序——第1部分——项目结构和框架
目录 介绍 存储库和数据库 设计理念 数据 UI 解决方案结构 界面结构 页面 路由视图 布局 表单 控件 Blazor.Database项目 Program.cs ServiceCollection ...
- 了解和使用DotNetCore和Blazor中的异步编程
目录 介绍 您对异步编程了解什么? 那么,什么是异步编程? 我们什么时候应该使用它? 任务.线程.计划.上下文 到底是怎么回事? Asnyc编码模式 命名约定 异步任务模式 任务模式 事件模式 阻塞与 ...
- 在Rust代码中编写Python是种怎样的体验?
作者 | Mara Bos,Rust资深工程师 译者 | Arvin,编辑 | 屠敏 来源 | CSDN(ID:CSDNnews) 大约一年前,我发布了一个名为inline-python(https: ...
- R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象
R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象 目录 R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象 #data.t ...
- linux命令行运行c程序,如何在Linux中编写和运行C程序
Linux正在成为开发人员的编程天堂,成为开源和免费操作系统. Turbo C编译器已经是一种编译程序的旧方法,所以让程序员转向Linux以获得新的编程环境. 在本文中,我们将解释如何编写,编译和运行 ...
- 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序
0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充 转载于:h ...
- Linux 多线程应用中编写安全的信号处理函数
2019独角兽企业重金招聘Python工程师标准>>> Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_m ...
- java代码如何与界面联系在一起_如何在Visual Studio Code 中编写Java代码
本文将展示如何在Visual Studio Code中用Java编写和运行一个简单的Hello World程序. 首先您必须在本地开发环境中安装Java SE开发工具包(JDK) Visual Stu ...
最新文章
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十二)
- C# Cookie操作类
- SAP BSP, Java Web Project,Android和微信小程序的初始页面设置
- .NET的一点历史故事:Novell的崩溃和Xamarin的重生
- Java代理初学者指南
- java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...
- CentOS7设置自定义开机启动,添加自定义系统服务
- 关于K8s技术架构的几个问题
- ThreadLocal到底是什么,尚硅谷docker高级
- python中的类及self详解_python中的self详解与对照与网站分享
- vue -使用阿里矢量图
- ARM基础学习-寄存器寻址方式和指令
- mpeg1,mpeg2,mpeg4
- 混合现实门户SteamVR环境下
- Docker Wnmp 搭建
- CTE递归 MAXRECURSION 遇到的问题
- eCharts改变饼图的默认颜色
- UltraISO使用和U盘安装原版系统指南
- [OHIF-Viewers]医疗数字阅片-医学影像-中间插播一下-es6-使用const加箭头函数声明函数相对于function声明函数有什么好处?...
- CSDN《原力计划—打卡挑战》为你而来,新升级, 多流量,抓住春季的小尾巴,冲冲冲!
热门文章
- linux下intel无线网卡安装失败,ubuntu 16.04无法安装无线网卡驱动
- java 线程百科_Java并发——线程介绍
- 配色没有灵感?最流行的配色案例!没有一个人不爱的
- 炫酷科技感超前的电子产品发布广告海报psd分层模板,带给你炫酷的未来感
- java mysql查询语句_Mysql查询语句执行过程
- qq动态页面变方格_腾讯QQ音乐9.7.5正式版更新:「歌手主页个人主页」界面全新改版...
- linux软件包管理解析,linux学习笔记_09_软件包管理解析.doc
- QLibrary 出现错误的排查
- C语言控制台窗口界面编程:用printf在终端打印一个GUI窗口
- 用户需求说明书_「软件项目管理入门」(21) 需求调研和需求分析怎么做?