如何在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 相关文章推荐
让iframe自适应高度(支持XHTML,支持FF)
Jul 24 Javascript
在Firefox下js select标签点击无法弹出
Mar 06 Javascript
jQuery中get和post方法传值测试及注意事项
Aug 08 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
Nov 03 Javascript
纯javascript制作日历控件
Jul 17 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
JavaScript和jQuery制作光棒效果
Feb 24 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
Feb 21 Javascript
如何对react hooks进行单元测试的方法
Aug 14 Javascript
vue vant Area组件使用详解
Dec 09 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编程效率的方法
2013/11/07 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
详细介绍Python函数中的默认参数
2015/03/30 Python
python字符串对其居中显示的方法
2015/07/11 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
python中退出多层循环的方法
2018/11/27 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
消防先进事迹材料
2014/02/10 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技