如何在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 相关文章推荐
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
javascript中日期转换成时间戳的小例子
Mar 21 Javascript
javascript 处理null及null值示例
Jun 09 Javascript
JavaScript通过元素的ID和name设置样式
Jul 08 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
js实现继承的5种方式
Dec 01 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
Jun 13 Javascript
用vue构建多页面应用的示例代码
Sep 20 Javascript
如何基于filter实现网站整体变灰功能
Apr 17 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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
构建简单的Webmail系统
2006/10/09 PHP
php session应用实例 登录验证
2009/03/16 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
php实现简单四则运算器
2020/11/29 PHP
javascript new fun的执行过程
2010/08/05 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python读取和保存视频文件
2018/04/16 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python流程控制 if else实现解析
2019/09/02 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
工程力学硕士生的自我评价范文
2013/11/16 职场文书
基层工作经历证明
2014/01/13 职场文书
安全生产管理责任书
2014/04/16 职场文书
车辆工程专业求职信
2014/06/14 职场文书
药剂专业自荐书
2014/06/20 职场文书
2016春节慰问信范文
2015/03/25 职场文书
使用pytorch实现线性回归
2021/04/11 Python
浅谈Python协程asyncio
2021/06/20 Python