面试官:了解低代码平台吗?(数字孪生低代码平台探索)(一)

2,619 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

写在前面

随着数字孪生相关项目的推进,在市场情绪的推动下,鼓吹着数字孪生相关概念的许多公司纷纷想要入场分一杯羹,当然,大部分的炒数字孪生概念的公司,都是停留在二维相关的展示,所谓数字孪生,不过“新瓶旧酒”罢了,那么眼看着没什么可炒了,该咋办了,许多公司开始给它增加搭档"炒CP",该找谁呢,这个时候“低代码”被寄予厚望,之所以数字孪生和低代码能够被捆绑“炒CP”,主要是对于二维的数字孪生,涉及到的主要是表格展示类,刚好避开了低代码开发平台对于复杂数据逻辑支持的缺陷,因此他俩可谓是天生的完美“CP”,说到这里,作为爱折腾的程序员本猿猴,那我们是不是也应该整起来,看看到底咋样呢?

项目初探

首先,为了整出这个“测试版”低代码平台,我们需要先了解一下这种二维数字孪生项目的主要展示形式,也就是界面的排版大致是咋样的,然后根据项目排版,整出一套通用的排版以适应项目的相关形态。某度搜索相关关键词,随便拿几张图来做个简单了解,如下

src=http___img2018.cnblogs.com_blog_1725277_201907_1725277-20190719150804240-2078405946.png&refer=http___img2018.cnblogs.webp

src=http___pic1.zhimg.com_v2-ac6458b9f8e4ec61f5ecaad05ae722ea_r.jpg_source=1940ef5c&refer=http___pic1.zhimg.webp

u=3472730224,583773621&fm=253&fmt=auto&app=120&f=GIF.gif

从上面3张图可以看出来,主要是铺表格,对称铺满表格即可,那么作为“灵魂产品经理”的我,提炼出来的样板是咋样的呢,当当当当,如下,一个“写意”的轮廓就确定下来了,接下来我们就按照这个精简的图来做低代码的尝试。

微信截图_20220622211729.png

相关技术探索

所谓低代码,也就是要减少手动写代码的量,简单来说,也就是希望实现的是图形化界面配置项目,那么图形化配置界面该具备哪些功能呢,首先想到的应该就是拖拽了吧,对于人感官来说,拖拽编辑应该是最贴近人操作意愿的方式了,那么接下来我们就来对拖拽相关技术进行简单的测试。

Vue 原生 draggable

可能平时许多业务中,都不会有太多机会接触到拖动,可能对于 Vue这个属性大家都比较陌生,大概介绍下,draggable 是 Vue 自带的一个属性值,当将某个元素的 deaggable 设置为 true 时,则该元素开启拖动效果,而当开启了 draggable 之后,我们就可以通过监听相关事件来完成我们想要的动作。

相关事件

draggable 元素主要涉及的事件有 dragstart、dragenter、dragover、dragend、drop、dragleave,这里我们想要用到的是 dragstart、drop和dragover。先上代码

<template>
  <div class="drag-container" >
    <div class="slider">
      <div class="cpn" draggable="true" @dragstart="ondragstart" id="组件 1">组件 1</div>
      <div class="cpn" draggable="true" @dragstart="ondragstart" id="组件 2">组件 2</div>
    </div>
    <div class="ctn-box">
      <div class="inner-box" @dragover.prevent="" @drop.stop="ondrop" id="模板框 1"></div>
      <div class="inner-box" @dragover.prevent="" @drop.stop="ondrop" id="模板框 2"></div>
    </div>
  </div>
</template>
<script>
export default {
  methods: {
    ondragstart(e){
      const id = e.target.getAttribute('id')
      console.log('ondragstart', id)
    },
    ondrop(e){
      const id = e.target.getAttribute('id')
      console.log('drop', id)
    }
  },
}
</script>

这里我们定义了两个组件和两个放置组件的模板框,首先是组件,组件是被拖动编辑的对象,那么我们先给组件加上 draggable 属性并绑上dragstart事件函数用来监听组件开始拖动的动作,当完成了这两个步骤后,接下来就是模板框,模板框为被放置的对象,因此需要绑定drop事件函数,用来监听组件放置的动作,而这里需要特别强调的是,虽然我们不需要用到 dragover 事件,但是我们依然需要给元素绑定该事件,并添加prevent修饰,这样drop事件才能够正常执行。接下来看看效果

GIF 2022-6-22 23-22-31.gif

组件添加

完成了上面的步骤后,我们就能够对拖动的相关状态进行控制了,接下来就是最后一步,将我们拖动到目标位置的组件渲染到该位置上。代码演示如下

<template>
  <div class="drag-container" >
    <div class="slider">
      <div class="cpn" draggable="true" @dragstart="ondragstart" id="CPN1">
        <CPN1 />
      </div>
      <div class="cpn" draggable="true" @dragstart="ondragstart" id="CPN2">
        <CPN2 />
      </div>
    </div>
    <div class="ctn-box">
      <div class="inner-box" @dragover.prevent="" @drop.stop="ondrop" id="ctn1">
        <component :is="ctn1" />
      </div>
      <div class="inner-box" @dragover.prevent="" @drop.stop="ondrop" id="ctn2">
        <component :is="ctn2" />
      </div>
    </div>
  </div>
</template>

<script>
import CPN1 from '@/components/CPN1'
import CPN2 from '@/components/CPN2'
export default {
  components: {
    CPN1,
    CPN2
  },
  data(){
    return {
      ctn1: '',
      ctn2: '',
      currentCpn: ''
    }
  },
  methods: {
    ondragstart(e){
      const id = e.target.getAttribute('id')
      console.log('ondragstart', id)
      this.currentCpn = id
    },
    ondrop(e){
      const id = e.target.getAttribute('id')
      console.log('drop', id)
      this[id] = this.currentCpn
    }
  },
}
</script>

这里在原来的 div 中添加了 CPN1 和 CPN2,然后通过 ondragstart函数来获取当前拖动的组件并保存到变量中,最后,在 ondrop中将模板框中国 <component :is="">绑定的变量修改为对应的组件名称,完成组件渲染,至此,拖动编辑完成

GIF 2022-6-22 23-50-08.gif

总结

本篇算是一个开篇,介绍了数字孪生与低代码这对“CP”的关系以及简单探索了其中一个关键的拖拽技术,而离完整实现还有很多事情需要完成,本篇就先到这里,下一篇继续相关技术的研究!!

往期好文推荐

面试官:了解低代码平台吗?(数字孪生低代码平台探索)(五)

面试官:了解低代码平台吗?(数字孪生低代码平台探索)(四)

面试官:了解低代码平台吗?(数字孪生低代码平台探索)(三)

面试官:了解低代码平台吗?(数字孪生低代码平台探索)(二)

面试官:了解低代码平台吗?(数字孪生低代码平台探索)(一)

面试官:说说从输入 URL 到页面显示到底经历了什么,体现一下你的知识广度

面试官:作为前端,服务器相关了解多少?

面试官:HTTPS 采用的是对称加密还是非对称加密?具体说说其加密过程

面试官:说说 Cookie 和 Token 的区别?

面试官:网络安全了解多少,简单说说?(一)

面试官:网络安全了解多少,简单说说?(二)

面试官:网络安全了解多少,简单说说?(三)

面试官:网络安全了解多少,简单说说?(四)

面试官:网络安全了解多少,简单说说?(五)

面试官:网络安全了解多少,简单说说?(六)

面试官:网络安全了解多少,简单说说?(七)

面试官:网络安全了解多少,简单说说?(八)

浅尝 | 从 0 到 1 Vue 组件库封装

面试官:这么简单的正则表达式都不会?

Webpack 打包类库踩坑

面试官:你就只会 npm run build 吗?(Webpack 配置 Vue+Ts)

面试官:连VuePress都没搭过还说开发过组件库?(VuePress 搭建)

面试官: 连 Vue 视图更新都不会写?(Vue视图更新原理【一】)

面试官: 能不能手写 Vue 响应式?(Vue2 响应式原理【完整版】)

面试官:能不能手写 Vue3 响应式(Vue3 原理解析之响应系统的实现)

JS 优雅之道(JS 代码优化小 Tip)

面试官:你真的会用 SVG 吗? (SVG 应用实战)

面试官:说一下这个Loading动画实现思路 (CSS3 实现 Loading 动画)

JS 扫盲题 ( 面试题梳理系列 (一))

面试官:你确定你说的防抖不是节流吗?( 面试题梳理系列 (二))

面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用)

面试官:你真的理解 Event Loop 吗?( JS 事件循环 )

面试官:v-for 中 key 为什么不能用 index,从原理层面聊聊?

面试官:vue-router 的 hash 与 history 哪个模式会刷新页面?

面试官:说说你平时用过的自适应方案(数字孪生可视化自适应方案)

面试官:说一下如何优化过渡动画(数字孪生可视化过渡动画)

写在最后

博主接下来将持续更新好文,欢迎关注博主哟!!
如果文章对您有帮助麻烦亲点赞、收藏 + 关注和博主一起成长哟!!❤️❤️❤️