如何在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 相关文章推荐
javascript中&quot;/&quot;运算符常见错误
Oct 13 Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
浅谈jQuery中height与width
Jul 06 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
Vue组件系列开发之模态框
Apr 18 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 28 Javascript
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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
js正则相关知识点专题
2018/05/10 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
详解Django框架中的视图级缓存
2015/07/23 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
python中logging包的使用总结
2018/02/28 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
自我鉴定的范文
2013/10/03 职场文书
商业融资计划书
2014/04/29 职场文书
安全教育演讲稿
2014/05/09 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
工作推荐信模板
2015/03/25 职场文书
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
Python开发五子棋小游戏
2022/04/28 Python
Redis高并发缓存架构性能优化
2022/05/15 Redis
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技