如何在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 统计时间
Mar 09 Javascript
javascript prototype,executing,context,closure
Dec 24 Javascript
Javascript倒计时代码
Aug 12 Javascript
javascript原型链继承用法实例分析
Jan 28 Javascript
浅析JavaScript动画
Jun 10 Javascript
jQuery获取及设置表单input各种类型值的方法小结
May 24 Javascript
第三篇Bootstrap网格基础
Jun 21 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 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 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
Python随机生成身份证号码及校验功能
2018/12/04 Python
超简单使用Python换脸实例
2019/03/27 Python
python编写简单端口扫描器
2019/09/04 Python
python验证码图片处理(二值化)
2019/11/01 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
红色经典观后感
2015/06/18 职场文书
监护人证明
2015/06/19 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
python基础之while循环语句的使用
2021/04/20 Python