在vue中使用jointjs的方法


Posted in Javascript onMarch 24, 2018

在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活用事件触发对象动作
Aug 10 Javascript
jQuery 各种浏览器下获得日期区别
Dec 22 Javascript
JQuery的一些小应用收集
Mar 27 Javascript
JavaScript isArray()函数判断对象类型的种种方法
Oct 11 Javascript
jquery()函数的三种语法介绍
Oct 09 Javascript
Javascript堆排序算法详解
Dec 03 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
vuex actions传递多参数的处理方法
Sep 18 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 Javascript
深入浅出vue图片路径的实现
Sep 04 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
浅谈Vue下使用百度地图的简易方法
Mar 23 #Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 #jQuery
Webpack 之 babel-loader文件预处理器详解
Mar 23 #Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 #Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 #Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 #Javascript
JavaScript 五大常见函数
Mar 23 #Javascript
You might like
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
node.js中npm包管理工具用法分析
2020/02/14 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
python合并同类型excel表格的方法
2018/04/01 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python实现Flappy Bird源码
2018/12/24 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
网络研修随笔感言
2014/02/17 职场文书
店面销售职位的职责
2014/03/09 职场文书
工作会议主持词
2014/03/17 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
东京审判观后感
2015/06/01 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
电频谱管理的原则是什么
2022/02/18 无线电
SQL Server中锁的用法
2022/05/20 SQL Server