低代码场景:在线编写html,css,js(组件)并运行各位大佬早上好中午好晚上好!志哥有多年的低代码经验,了解了

在我们公司自研的低代码平台中,有个需求是在内置组件无法满足业务需求的情况下,需要快速进行组件的设计开发,目前有三种方案:

本文将从项目的创建到设计器的开发,组件的加载,渲染等步骤向你一步步揭开在线设计组件的面纱。

此demo所使用的技术栈为:

相信我,你看得懂的!!

ngnewonline-component-design项目创建好了安装ace-builds库

yarnaddace-builds初始化ace-builds库,在angular.json中将html,css,javascript的样式导入到assets中:

"assets":["src/favicon.ico","src/assets",{"glob":"worker-html.js","input":"./node_modules/ace-builds/src-noconflict/","output":"/"},{"glob":"worker-css.js","input":"./node_modules/ace-builds/src-noconflict/","output":"/"},{"glob":"worker-json.js","input":"./node_modules/ace-builds/src-noconflict/","output":"/"},{"glob":"worker-javascript.js","input":"./node_modules/ace-builds/src-noconflict/","output":"/"}],写个工具函数用于加载ace-builds:

getAce().subscribe((ace)=>{...});2.将页面分为在线组件设计器和渲染器添加两个路由模块:

设计器

import{NgModule}from'@angular/core';import{RouterModule,Routes}from'@angular/router';import{OnlineDesignComponent}from"./design.component";constroutes:Routes=[{path:'design',component:OnlineDesignComponent}];@NgModule({imports:[RouterModule.forRoot(routes)],exports:[RouterModule]})exportclassOnlineDesignRoutingModule{}设计器页面布局

如上,将页面分为四部分:

渲染器

import{NgModule}from'@angular/core';import{RouterModule,Routes}from'@angular/router';import{OnlineRenderComponent}from"./render.component";constroutes:Routes=[{path:'render',component:OnlineRenderComponent}];@NgModule({imports:[RouterModule.forRoot(routes)],exports:[RouterModule]})exportclassOnlineRenderRoutingModule{}渲染器页面布局

组件操作有:组件设置,组件编辑,组件预览

页面布局完了,下一步进行编辑器组件封装

编辑器组件分为html、css、javascript、json组件,其实这四个组件大同小异,基本都差不多:

html:

到这里我们可以拿到组件设计时的数据:

JavaScript的解析我们希望能够注入一些(数据、服务、接口、组件、工具函数)供组件消费。我们希望通过self.ctx可以拿到我们注入的的上下文信息:

上面的截图我们可以注入了包括且不限于:

文末会演示使用内置组件进行二次编辑的例子。

我们拿到用户编写的js字符串:

通过newFunction的方式注入context和执行用户编写的js。

privatecreateWidgetControllerDescriptor(widget:Widget,name:string){letwidgetTypeFunctionBody=`returnfunction_${name.replace(/-/g,'_')}(ctx){\n`+'varself=this;\n'+'self.ctx=ctx;\n\n';widgetTypeFunctionBody+=widget.javascriptTemplate;widgetTypeFunctionBody+='\n};\n';//console.log('widgetTypeFunctionBody>>:',widgetTypeFunctionBody);constwidgetTypeFunction=newFunction(widgetTypeFunctionBody);constwidgetType=widgetTypeFunction.apply(this);constresult={widgetTypeFunction:widgetType};returnresult;}上面的方法中我们先通过创建一个自定义函数体(绑定ctx)+用户js,通过newFunction执行函数体widgetTypeFunctionBody创建函数并返回,然后将此函数放到widget的widgetTypeFunction上。

下一步解析html,这一步就是创建组件的过程,我这边使用Angular技术栈创建一个动态组件,其他技术栈的同学可以参考此方法实现。

创建动态组件我把他封装了一个服务dynamic-component-factory.service.ts:

viewContainerRef.createComponent(this.widgetInfo.componentFactory,0,injector);可以创建一个组件。

拿到工厂组件widgetInfo然后实例化上下文newWidgetContext(this.widgetInfo)

init(){this.customComponentService.getWidgetInfo(this.widget).subscribe({next:(widgetInfo)=>{console.log('widgetInfo>>:',widgetInfo);this.widgetInfo=widgetInfo;this.widgetContext=newWidgetContext(this.widgetInfo);this.loadFromWidgetInfo();},error:err=>{console.log(err)}})}解析之前保存到widget上的widgetTypeFunction方法,并执行;

privateloadFromWidgetInfo(){this.widgetContext.widgetNamespace=`widget-type-${this.widget.id}`;constelem=this.elementRef.nativeElement;elem.classList.add('custom-widget');elem.classList.add(this.widgetContext.widgetNamespace);this.widgetType=this.widgetInfo.widgetTypeFunction;if(!this.widgetType){this.widgetTypeInstance={};}else{try{//这一步是核心this.widgetTypeInstance=newthis.widgetType(this.widgetContext);}catch(e){this.widgetTypeInstance={};}}//console.log('this.widgetTypeInstance>>:',this.widgetTypeInstance);if(!this.widgetTypeInstance.onInit){this.widgetTypeInstance.onInit=()=>{};}if(!this.widgetTypeInstance.onDestroy){this.widgetTypeInstance.onDestroy=()=>{};}//这个创建组件方法this.configureDynamicWidgetComponent();//执行里面的生命周期//可以加入更多的生命周期函数this.widgetTypeInstance.onInit();}创建组件

拿到用户编写的css直接执行这个函数:

privateparserCss(){constnamespace=`${this.widgetInfo.widgetName}-${Math.random()}`;constcustomCss=this.widgetInfo.cssTemplate;this.cssParser.cssPreviewNamespace=namespace;this.cssParser.createStyleElement(namespace,customCss,'nonamespace');}我们来看下实际运行效果:

编辑settings,让组件表现不同的行为。这一步其实就是组件实例化的过程。

完成以上JavaScript、settings、html、css的解析,我们的组件在线编写和渲染也差不多完成了,这个只是示例,实际生产环境需要考虑更多情况和边界条件,各位可以参考此实现方式,给做低代码的同学提供一个设计思路,如有更多实现方式,欢迎讨论。

本文所有的代码均已开源放到gitHub上了,欢迎各位大佬食用:

THE END
1.HTML在线编辑器查看HTML源代码 https://www.agzyy.com.cn/editor/editor.asp
2.HTML/CSS/JS在线工具菜鸟工具HTML/CSS/JS 在线工具HTML 模板案例 选择库使用 jQuery 2.2.4使用 Bootstrap 3.3.7使用 Bootstrap 4.6.0使用 Angular 1.6.6使用 Vue 2.2.2使用 Vue 3.2.33使用 Font Awesome 4.7.0更多……下载运行自动执行外部资源请使用 https 协议 输入HTML 代码…… https://c.runoob.com/front-end/61/
3.HTML在线编辑器重塑网页开发未来,打造便捷开发体验摘要:HTML在线编辑器是重塑网页开发未来的重要工具。这种编辑器允许开发者在云端进行实时协作,提高开发效率和便捷性。通过在线编辑器,开发者可以随时随地编写和修改代码,无需安装任何软件。这种创新的技术趋势将推动网页开发行业的快速发展,为开发者提供更加灵活、高效的开发方式。 http://3g.qiuruikeji.cn/post/646.html
4.HTML+CSS+JS在线编辑器实时预览代码效果的前端IDELightly HTML、CSS、JS 前端IDE支持在线网页编程,代码在线运行,实时预览前端效果。在线编辑、编译、运行前端项目。任意操作系统,打开浏览器即可编码。支持web端和桌面客户端写代码。https://lightly.teamcode.com/html/
5.最好用的在线DIV+CSS编辑器资源在网页设计领域,DIV+CSS是一种常见的布局技术,它能够帮助开发者实现清晰、灵活的页面结构。本文将深入探讨“最好用的在线DIV+CSS编辑器”,以及它们如何为布局网站提供便利。 让我们理解什么是DIV和CSS。DIV是一个HTML元素,用于组合文档中的其他元素,通常作为页面布局的基本单元。CSS(层叠样式表)则是用来控制网页元素https://download.csdn.net/download/buguniao81499488/2957246
6.html在线编辑器预览网页版,rpa,机器人,自动化w3ccoo.comW3Schools 在线编辑器 (编译器 / 解释器)W3Schools 在线编辑器提供在线代码测试,实例练习,实验,模板和源代码。涵盖HTML,Python,CSS,SQL,JavaScript,PHP,Java,C++,jQuery,Bootstrap,XML,MySQL等热门主题。更多内容请查看https://www.w3ccoo.com/tryit/ https://wdlinux.cn/html/biancheng/20241018/7209.html
7.iCode一款在线htmlcssjs编辑器iCode,一款在线 html/css/js 编辑器 JavaScript开发-编辑器2019-08-10 上传大小:83KB 所需:50积分/C币立即下载 2024世界机器人大赛ICode专属训练平台Python小学组1-10题答案 2024世界机器人大赛ICode专属训练平台(Python小学组)1-10题练习答案 比赛训练题目包含的知识点为: 基本操作——(一级)基本运动指令、(二级https://www.iteye.com/resource/weixin_39840515-11509078
8.HTML/CSS/JS在线运行代码,代码编辑器在线代码编辑器 HTML/CSS/JS在线运行代码工具为您提供在在线执行Js代码工具,网页代码调试器,Html在线预览工具,可以把Html页面代码进行在线调试,在线预览 ,代码编辑器,代码在线编辑器,支持Jquery和Js。http://www.toolsplus.cn/runjs/
9.HTML/CSS/JS在线运行代码,代码编辑器在线代码编辑器 HTML/CSS/JS在线运行代码工具为您提供在在线执行Js代码工具,网页代码调试器,Html在线预览工具,可以把Html页面代码进行在线调试,在线预览 ,代码编辑器,代码在线编辑器,支持Jquery和Js。https://moeyy.cn/tool/runjs/
10.10个在线HTML代码编辑器互联网上有很多在线 HTML 代码编辑器,这将跳过 HTML 代码编辑器软件的安装过程。此外,该在线编辑器将免费提供所有基本功能。对于一些高级功能,我们必须支付一些钱。但这是可选的。以下是顶级 HTML 在线代码编辑器的一些示例。 1.JSFiddle 它是一种在线 HTML 编辑器。它支持 HTML、CSS 和 JAVASCRIPT。在 JSFiddlehttps://www.jdon.com/73015.html
11.HTML在线编辑器:分享专业知识与方法,轻松上手的秘诀三、使用HTML在线编辑器的具体方法 1、以CodePen为例: (1)注册并登录:访问CodePen官网,注册账号并登录。 (2)创建新Pen:点击“Create New Pen”按钮,进入编辑界面。 (3)编写代码:在HTML、CSS、JS三个编辑区域中分别编写代码,实时预览效果。 (4)保存与分享:完成编辑后,点击“Save”按钮保存代码,并通过分享链接https://www.xiaoyuxitong.com/cjwt/169567.html
12.Web设计师必备:10款最佳免费CSS在线编辑器如果你是一个Web设计师你肯定会想在线编辑CSS代码,那么本文就为你介绍10个在线CSS编辑器,希望对您有所帮助。 CSS有着诸多的优点让Web设计师爱不释手,使用CSS布局的页面可以提高页面的浏览速度、易于维护和改版。如果你是一个Web设计师你肯定会想在线编辑CSS代码,那么本文就为你介绍10个在线CSS编辑器,希望对您有所https://www.51cto.com/article/273498.html
13.10个在线CSS编辑器–自娱自乐这里为Web设计师推荐10个免费的在线CSS编辑器,供你随时随地使用,非常方便。 我个人是对Firefox上的插件FireBug for Firefox更感冒,因为把这个小插件安装到你的Firefox浏览器上后,就可以很轻松地查看你浏览页面的Xhtml和CSS甚至DOM、JS等脚本了,对于喜欢扣取别的网站特效的人来说,自然是个不可缺少的插件。 https://xjzhou.wordpress.com/2010/07/30/10%E4%B8%AA%E5%9C%A8%E7%BA%BFcss%E7%BC%96%E8%BE%91%E5%99%A8/
14.怎么用HTML+CSS做实时预览的markdown编辑器web开发这篇文章主要讲解了“怎么用HTML+CSS做实时预览的markdown编辑器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用HTML+CSS做实时预览的markdown编辑器”吧! <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> https://www.yisu.com/jc/629194.html
15.20个在线代码编辑器和开发工具HTML5, node.js, socket.io and many other projects. The application has a pretty fast text editor with bundled syntax highlighting support for JS, HTML, CSS and mixed modes. Cloud9 IDE has integrated debuggers for node.js and Google Chrome which can be started, paused and stopped from thehttp://www.360doc.com/content/15/0220/08/9200790_449544068.shtml
16.在线HTML编辑器默认模式、简单模式、手动加载编辑器、默认模式为代码模式、手动添加CSS文件、只能调整高度, 禁止调整大小http://kindeditor.net/demo.php
17.HTML编辑器使用我们的可视HTML编辑器,您可以大大简化页面代码的生成过程。最佳的HTML,CSS,JS预览版免费在线编辑器。https://anytexteditor.com/cn/online-html-editor
18.一款纯HTML+CSS+JS富文本编辑器handyeditor007少侠一款纯HTML+CSS+JS富文本编辑器-handyeditor 官网:http://he.catfish-cms.com/ 修改版本(修改一些BUG和图片上传服务器点击下载: handyeditor富文本编辑器.zip): 图片上传接口上传类型: Content-Type: multipart/form-data; boundary=---WebKitFormBoundaryPZsqN8AAcNd2UG2k https://www.cnblogs.com/007sx/archive/2004/01/13/9556163.html
19.JS/HTML/CSS代码格式化工具简介 JS/HTML/CSS代码格式化、代码格式美化工具;同时也是一个简单版在线HTML代码编辑器,支持Tab提示代码及自动补全。 更新日志: 【2021-08-24】工具进行了全新改版,支持在线编辑代码及代码自动补全!https://tools.kalvinbg.cn/dev/jsHtmlCss/format
20.JavaScript在线编辑器(编译器/解释器)JavaScript教程在本教程中,您将学习如何使用JavaScript在线编辑器,JavaScript编辑器(编译器)使用我们的在线JavaScript编辑器,您可以编辑HTML、CSS和JavaScript代码,并在浏览器中查看结果。https://w3schools.cn/js/js_editor.asp
21.在线html/css/javascript前端代码调试运行工具这是一款脚本之家根据开源代码改进而来的在线HTML/CSS/JavaScript代码调试运行工具,代码界面部分由4个区域组成,分别显示HTML、CSS与JavaScript代码,右下角显示代码运行结果。用户可点击相应的代码区域或者上方的导航条进入代码编辑区,代码编写完毕之后按下运行按钮或使用“Ctrl+Enter键”即可直接提交运行代码。左侧区域还提供http://tools.jb51.net/code/WebCodeRun