Blockly + Vue 之初始化

前言

由于公司最近有需求,要实现拖拽积木块生成代码,所以临时学了些 Blockly,再加上技术栈是 Vue,所以关于两者结合使用还是有些收获的。当时实现部分功能也是花了些时间的,所以想要记录下来,方便之后查阅。

目标

本篇文章的目标非常简单,具体如下:

  1. Blockly 简介
  2. Vue 项目中初始化 Blockly
  3. Blockly 基本概念

实现

1. Blockly 简介

Blockly 是谷歌开源的,在网页上运行的图形化编程语言。可以使用户以拖拽拼图的方式开发出应用程序,不需要任何的代码编写。

2. Vue 项目中初始化 Blockly

2.1 装包

npm i blockly -S

2.2 引入

import Blockly from 'blockly';

2.3 注入、生成 JavaScript 代码

注入很简单,只需要调用其 inject 方法,传入 locationoptions 参数即可。location 是注入 DOM 的位置,options 是配置项,本次先用到 toolbox(工具箱)配置,它是侧边菜单,支持以 XML 或 JSON 指定其结构,用户可以从中创建块。

同时,Blockly 支持将块翻译成 JavaScript,Python,PHP,Lua,Dart 或其他语言,只需调用 workspaceToCode 方法即可。

具体代码如下:

<template>
  <div class="demo1">
    <el-row>
      <el-col :span="12">
        <div id="blockly-div"></div>
      </el-col>
      <el-col :span="12">
        <div id="code-box">
          <code>
            {{code}}
          </code>
        </div>
      </el-col>
    </el-row>
  </div>
</template>

<script>
// 引入 Blockly
import Blockly from 'blockly';  

export default {
  name: 'Demo1',
  data () {
    return {
      // Blockly 工作区实例
      workspace: null,
      // 工具箱配置
      toolbox: {
        // kind,分类,flyoutToolbox 为工具箱
        "kind": "flyoutToolbox",
        // contents,内容
        "contents": [
          {
            // kind,分类,block,块
            "kind": "block",
            // type,块类型,controls_if 为官方内置的块名,表示 if 判断
            "type": "controls_if"
          },
          {
            "kind": "block",
            // type,块类型,controls_if 为官方内置的块名,表示 while 判断
            "type": "controls_whileUntil"
          }
        ]
      },
      // Blockly 生成的代码
      code: null
    }
  },
  methods: {
    // 初始化 Blockly
    initBlockly() {
      // 注入到 blockly-div 中
      this.workspace = Blockly.inject('blockly-div', {
        toolbox: this.toolbox
      });
      // 为工作区添加修改事件,触发调用 updateCode 函数
      this.workspace.addChangeListener(this.updateCode);
    },
    // 更新当前块对应的 JS 代码
    updateCode() {
      // 获取当前块对应的 JS 代码
      this.code = Blockly.JavaScript.workspaceToCode(this.workspace);
    }
  },
  mounted() {
    this.initBlockly();
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
  #blockly-div {
    width: 800px;
    height: 400px;
    margin-left: 80px;
  }

  #code-box {
    width: 700px;
    height: 378px;
    padding: 10px;
    border: 1px solid #c6c6c6;
  }
</style>

2.4 代码效果

在这里插入图片描述

如上所示,可通过拖拽配置好的块,动态生成 JS 代码。

3. Blockly基本概念

在这里插入图片描述

参考链接

  1. 官方文档

  2. 中文文档

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值