如何在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 相关文章推荐
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
Oct 08 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
Nov 23 Javascript
jQuery自动完成插件completer附源码下载
Jan 04 Javascript
浅谈JS原型对象和原型链
Mar 02 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
jQuery Mobile操作HTML5的常用函数总结
May 17 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 Javascript
原生JavaScript实现Ajax异步请求
Nov 19 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
js判断鼠标移入移出方向的方法
Jun 24 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
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
js实现登录验证码
2016/12/22 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
Python连接phoenix的方法示例
2017/09/29 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python实现趣味图片字符化
2019/04/30 Python
Python多线程正确用法实例解析
2020/05/30 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
工程业务员工作职责
2013/12/07 职场文书
成龙洗发水广告词
2014/03/14 职场文书
《大海那边》教学反思
2014/04/09 职场文书
学生检讨书范文
2014/10/30 职场文书
2015年党小组工作总结
2015/05/26 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
Pytorch可视化的几种实现方法
2021/06/10 Python
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript