如何在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中的一些定位属性[图解]
Jul 14 Javascript
js验证模型自我实现的具体方法
Jun 21 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
关于vue的语法规则检测报错问题的解决
May 21 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
Apr 08 Javascript
jQuery实现tab栏切换效果
Dec 22 jQuery
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使用ICQ网关发送手机短信
2013/10/30 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
哪些是python中web开发框架
2020/06/17 Python
为什么相对PHP黑python的更少
2020/06/21 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
计算机开发个人求职信范文
2013/09/26 职场文书
年会活动策划方案
2014/01/23 职场文书
大学同学会活动方案
2014/08/20 职场文书
承诺书模板
2014/08/30 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书