如何在vue中使用jointjs过程解析


Posted in Javascript onMay 29, 2020

在vue中引入joint.js的问题,之前在网上搜了很多,都没有给出一个确切的答案,捣鼓了两天终于弄明白了,做个记录。

首先,我参考了一篇来自stackoverflow的文章

看完这篇文章,大家应该至少大致怎么做了,下面我们来具体看一下:

首先在vue项目中运行npm install jointjs --save

然后在入口文件,我的是main.js,也有可能是app.js中加入下面两行,把joint.js和jquery作为全局变量

window.$ = require('jquery');
window.joint = require('jointjs');

这里需要注意的是,joint.js依赖backbone、jquery和lodash,在通过script方式引入时,需要一一引入这些文件,但通过vue的npm时不需要,npm引入的joint.js已经默认封装好了这些。

通过这样引入还不够,可能会遇到图可以正常加载,但无法拖拽的问题,遇到这些问题一般是joint.js和自己vue项目中的环境冲突了,导致无法读取或者读取错误。

我原来的项目中安装了element、iview、axios、vuex、jquery,再安装joint.js后,jointjs无法正常加载,后来重新建了一个项目,只安装了element、axios、vuex,为避免jquery和joint.js中的jquery冲突,后来没有装jquery。

这样就行了么?就可以运行上文链接中的例子了么?像这样:

<template>
  <div>
    <h1>Home</h1>
    <div id="myholder"></div>
  </div>
</template>

<script>
  export default {
    created() {
      let graph = new joint.dia.Graph;

      let paper = new joint.dia.Paper({
        el: $('#myholder'),
        width: 600,
        height: 200,
        model: graph,
        gridSize: 1
      });

      let rect = new joint.shapes.basic.Rect({
        position: { x: 100, y: 30 },
        size: { width: 100, height: 30 },
        attrs: { rect: { fill: 'blue' }, text: { text: 'my box', fill: 'white' } }
      });

      let rect2 = rect.clone();
      rect2.translate(300);

      let link = new joint.dia.Link({
        source: { id: rect.id },
        target: { id: rect2.id }
      });

      graph.addCells([rect, rect2, link]);
    }
  }
</script>

NoNoNo,注意到这里是把渲染放在了created的生命周期里,根据vue的生命周期,是无法找到joint的挂载div的el: $('#myholder'),也就是说,运行会报错,我的解决方法是把div放了一个click,把joint的内容从created中拿出,放在methods中,需要点击一下才可显示哦,还不太完美,以待改进(~ ̄? ̄)~

也就是说,代码会变成这样:

<template>
  <div>
    <div id="myholder" @click="click_joint"></div>
  </div>
</template>

<script>
  export default {
   methods:{
     click_joint() {
      let graph = new joint.dia.Graph;

      let paper = new joint.dia.Paper({
        el: $('#myholder'),
        width: 600,
        height: 200,
        model: graph,
        gridSize: 1
      });

      let rect = new joint.shapes.basic.Rect({
        position: { x: 100, y: 30 },
        size: { width: 100, height: 30 },
        attrs: { rect: { fill: 'blue' }, text: { text: 'my box', fill: 'white' } }
      });

      let rect2 = rect.clone();
      rect2.translate(300);

      let link = new joint.dia.Link({
        source: { id: rect.id },
        target: { id: rect2.id }
      });

      graph.addCells([rect, rect2, link]);
    }
   }
  }
</script>

点明一下,通过npm引入只要install jointjs就可以,不需要install lodash、backbone、jquery,也不需要在页面中导入joint.css文件。笔者之前通过script方式引入joint.js,试了很多次,都没有成功,一直读取joint.js文件出错,如果其他小伙伴尝试成功,欢迎交流分享。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Aug 25 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
Bootstrap对话框使用实例讲解
Sep 24 Javascript
js简单实现网页换肤功能
Apr 07 Javascript
解决vue打包项目后刷新404的问题
Mar 06 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 Javascript
JavaScript实现动态留言板
Mar 16 Javascript
JavaScript 如何计算文本的行数的实现
Sep 14 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
vue实现信息管理系统
May 30 #Javascript
微信小程序语音同步智能识别的实现案例代码解析
May 29 #Javascript
vue实现户籍管理系统
May 29 #Javascript
JavaScript闭包原理与用法学习笔记
May 29 #Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 #jQuery
JS组件库AlloyTouch实现图片轮播过程解析
May 29 #Javascript
基于vue实现探探滑动组件功能
May 29 #Javascript
You might like
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Python sorted对list和dict排序
2020/06/09 Python
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
简短的公司员工自我评价分享
2013/11/13 职场文书
毕业生优秀推荐信
2013/11/26 职场文书
网络技术专业推荐信
2014/02/20 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python