低代码场景:在线编写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.小闪电JSRUN是一款支持手机编程的在线编辑器, 支持40多种语言的在线运行工具,js/C语言/java/python/nodejs/c++/c#/vb/F#,js代码在线测试调试运行,支持vue.js的在线运行编辑器 、ipad编程js编辑器\ js在线运行工具, 支持ES6开发,JSRUN拥有功能强大的在线运行编辑器、JS在线运行编https://jsrun.net/
2.html在线编辑器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.2024年Web开发者必备的30款CSS工具编写css的软件CSS Menu Maker 提供了一种简单有效的方式,可以使用 CSS 代码创建时尚且功能强大的菜单。 10. EnjoyCSS ENJOY CSS EnjoyCSS 是一个基于 Web 的工具,用于创建和自定义 CSS 代码。 它有一个用户友好的界面,具有拖放功能和可视化编辑器。 你可以使用它来创建和修改 CSS 样式,而无需手动编写代码。 https://blog.csdn.net/m0_54851477/article/details/144426614
4.在线HTML编辑器默认模式、简单模式、手动加载编辑器、默认模式为代码模式、手动添加CSS文件、只能调整高度, 禁止调整大小http://kindeditor.net/demo.php
5.在线CSS属性可视化在线编辑工具代码工具在线代码去行号工具 在线SQL格式化/压缩工具 在线CSS颜色/透明度渐变效果代码工具 在线CSS边框圆角效果代码工具 在线CSS噪音/纹理效果代码工具 在线CSS盒子阴影效果代码工具 在线less编辑器/less转css工具 在线css转less/sass/stylus工具,css编辑器 CSS3剪贴路径(Clip-path)在线生成器工具 在线代码高亮显示工具 在线css sphttp://tools.jb51.net/code/css_edit
6.HTML+CSS+JS在线编辑器实时预览代码效果的前端IDELightly HTML、CSS、JS 前端IDE支持在线网页编程,代码在线运行,实时预览前端效果。在线编辑、编译、运行前端项目。任意操作系统,打开浏览器即可编码。支持web端和桌面客户端写代码。https://lightly.teamcode.com/html/
7.HTML/CSS/JS在线运行代码,代码编辑器在线代码编辑器 HTML/CSS/JS在线运行代码工具为您提供在在线执行Js代码工具,网页代码调试器,Html在线预览工具,可以把Html页面代码进行在线调试,在线预览 ,代码编辑器,代码在线编辑器,支持Jquery和Js。https://yuucn.cn/runjs/
8.CSSOnlineEditorCSS Editor With our online CSS editor, you can edit HTML, CSS and JavaScript code, and view the result in your browser. Run ?Size:508 x 310 body{ background-color:lightblue; } h1{ color:white; text-align:center; } p{ font-family:verdana;https://www.w3schools.com/css/css_editor.asp
9.CSS在线编辑器OnLine CSS Designer - CSS Style Editor CSS 样式 在线编辑器 CSS 样式效果即时演示区域。 CSS 样式 在线编辑器 CSS 样式效果即时演示区域。 CSS 样式 在线编辑器 CSS 样式效果即时演示区域。 请在此输入想要在效果演示中显示的内容,按确认键即可在上面演示区域查看效果。 http://e-file.dsbbhq.com/tools/cssEditor.htm
10.HTML/CSS/JS在线运行代码,代码编辑器在线代码编辑器 HTML/CSS/JS在线运行代码工具为您提供在在线执行Js代码工具,网页代码调试器,Html在线预览工具,可以把Html页面代码进行在线调试,在线预览 ,代码编辑器,代码在线编辑器,支持Jquery和Js。http://www.66zan.cn/runjs/
11.在线css编辑器可视化css编辑器CSS在线编辑器工具,可在线编辑CSS样式,实时直观显示CSS样式效果,自动生成可直接调用的CSS样式代码。http://www.kuquidc.com/ui/CssDesigner.php
12.10个在线CSS编辑器–自娱自乐CSS编辑器会给你带来多大的好处,尤其是那些第三方开发的在线CSS编辑器,不但体积小巧,功能强大,而且simple and easy to use,随时随地可以使用,还无需在本地安装。有人说掌握Dreamweaver就足够了,而且它的级联提示做的也很好,省去了Coder很多拼写字母的时间。但是,它只是放在作坊里的大型机器,如果你要外出生产作业的话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/
13.淘宝天猫导航CSS编辑器码工在线码工在线专业淘宝特效代码免费生成网站,丰富的特效简单的操作无平台限制,不需要下载任何软件,在线即可完成复杂的代码编辑!装修助手001DaiMa.comhttps://dianshang.gaoding.com/tool/html/tool/sys_menu.html
14.HTML/CSS/JS在线运行代码,代码编辑器在线代码编辑器 HTML/CSS/JS在线运行代码工具为您提供在在线执行Js代码工具,网页代码调试器,Html在线预览工具,可以把Html页面代码进行在线调试,在线预览 ,代码编辑器,代码在线编辑器,支持Jquery和Js。https://tool.supercreator.cn/runjs/
15.HTML在线编辑器:分享专业知识与方法,轻松上手的秘诀三、使用HTML在线编辑器的具体方法 1、以CodePen为例: (1)注册并登录:访问CodePen官网,注册账号并登录。 (2)创建新Pen:点击“Create New Pen”按钮,进入编辑界面。 (3)编写代码:在HTML、CSS、JS三个编辑区域中分别编写代码,实时预览效果。 (4)保存与分享:完成编辑后,点击“Save”按钮保存代码,并通过分享链接https://www.xiaoyuxitong.com/cjwt/169567.html
16.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
17.20个在线代码编辑器和开发工具BluePen Editor is a PHP-powered CSS editor that can be installed to any static or dynamic website and makes live CSS editing possible. Once triggered (with a bookmarklet), it opens the editor widget and makes all HTML elements hoverable so that blupePen can locate the CSS rules of themhttp://www.360doc.com/content/15/0220/08/9200790_449544068.shtml
18.10个在线HTML代码编辑器互联网上有很多在线 HTML 代码编辑器,这将跳过 HTML 代码编辑器软件的安装过程。此外,该在线编辑器将免费提供所有基本功能。对于一些高级功能,我们必须支付一些钱。但这是可选的。以下是顶级 HTML 在线代码编辑器的一些示例。 1.JSFiddle 它是一种在线 HTML 编辑器。它支持 HTML、CSS 和 JAVASCRIPT。在 JSFiddlehttps://www.jdon.com/73015.html
19.Code在线代码编辑器 设置 git clone https://github.com/dsnehasish74/Online-Code-Editor.git cd Online-Code-Editor npm install npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 要访问此站点,点赞(0) 踩踩(0) 反馈 所需:1 积分 电信网络下载 https://www.coder100.com/index/index/content/id/2449944
20.css渐变代码在线编辑器51CTO博客已为您找到关于css渐变代码在线编辑器的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及css渐变代码在线编辑器问答内容。更多css渐变代码在线编辑器相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/cssjianbiandaimazaixianbianjiqi.html
21.在线编辑器,在线运行代码,在线编译器大全在线工具(cainiaojc.com),为前后端开发人员提供在线编辑器,在线调试器,在线编译器,在线格式化,在线压缩代码,以及C++、C、Golang、Java、Kotlin、Node.js、Python、Swift、PHP、Python、 CSS、JS等在线调试工具,帮您在线快速调试,编译代码。https://www.cainiaojc.com/tool/index.html
22.分享41个与网页设计样式相关的在线代码生成工具前端达人22、CSS 变换游乐场 地址:https://codepen.io/vsync/pen/RayMgz 23、边界半径游乐场 地址:https://codepen.io/cobra_winfrey/pen/jpRQbP 24、CSS 剪辑路径编辑器 地址:https://codepen.io/stoumann/pen/abZxoOM 25、CSS 过滤器编辑器 地址:https://codepen.io/stoumann/pen/MWeNmyb https://www.shangyexinzhi.com/article/4632341.html
23.phpcss文件怎么打开?Worktile社区4. 使用CSS预处理器:如果你使用的是CSS预处理器(如LESS、Sass等),你需要使用相应的编译器来将预处理器代码编译为CSS代码。通常,预处理器代码和CSS文件是分开存储的,你需要使用预处理器的命令行工具或图形界面工具进行编译。 5. 使用在线CSS编辑器:如果你只是需要进行一些小的修改或快速预览CSS文件的效果,可以使用https://worktile.com/kb/ask/124888.html
24.CSS3可视化网页编辑器基于tinymce编辑器DEMO演示扫码获取源码https://www.html5tricks.com/demo/html5-css3-json-editor/index.html
25.推荐38个CSS在线工具助力你提升工作效率英文| https://hulyakarakaya.medium.com/level-up-your-css-with-these-38-resources-c0de7ecd8714 翻译| 杨小二 大家好,今天我将向你分享38个可以用来创建漂亮样式的 CSS 工具。 1、Layoutit Grid 地址:https://grid.layoutit.com/ Layoutit grid 是一个CSSGrid 布局生成器。使用干净的编辑器可以快速绘制https://cloud.tencent.com/developer/article/1885376
26.HTML编辑器使用我们的可视HTML编辑器,您可以大大简化页面代码的生成过程。最佳的HTML,CSS,JS预览版免费在线编辑器。https://anytexteditor.com/cn/online-html-editor
27.10个前端开发在线实用工具效率提升CodePen提供了一个浏览器内编码环境,专为学习编码和快速原型创作而设计。它经常被用来展示网站的demo,同时它也是学习前端开发基础知识的好地方。 CodePen Tridiv-CSS 3D图形编辑器 http://tridiv.com/ 利用最新的CSS技术,配合支持的浏览器,可以轻松的在线创建、浏览并保存管理Web3D图像。Tridiv是一个基于 Web 的免https://www.jianshu.com/p/7693c1e3c268
28.在线html编译器,rpa,机器人,自动化w3ccoo.comW3Schools 在线编辑器 (编译器 / 解释器)网页W3Schools 在线编辑器提供在线代码测试,实例练习,实验,模板和源代码。涵盖HTML,Python,CSS,SQL,JavaScript,PHP,Java,C++,jQuery,Bootstrap,XML,MySQL 更多内容请查看https://www.w3ccoo.com/tryit/#:~:text=W3Schools https://www.wdlinux.cn/html/biancheng/20240930/2398.html