如何在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显示的网页实现方法
Feb 04 Javascript
使用javascript获取页面名称
Dec 23 Javascript
js实现跨域的4种实用方法原理分析
Oct 29 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
原生js实现点击轮播切换图片
Feb 11 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 Javascript
js实现简单的点名器随机色实例代码
Sep 20 Javascript
uni-app 自定义底部导航栏的实现
Dec 11 Javascript
JavaScript原型链中函数和对象的理解
Jun 16 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
Python守护进程用法实例分析
2015/06/04 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
np.dot()函数的用法详解
2020/01/17 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
浅析Python面向对象编程
2020/07/10 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
Python读写Excel表格的方法
2021/03/02 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
有针对性的求职自荐信
2013/11/14 职场文书
优秀交警事迹材料
2014/01/26 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
转预备党员政审材料
2014/02/06 职场文书
记帐员岗位责任制
2014/02/08 职场文书
项目负责人岗位职责
2015/02/15 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Pillow图像处理库安装及使用
2022/04/12 Python