在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 相关文章推荐
Prototype Number对象 学习
Jul 19 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
表单的焦点顺序tabindex和对应enter键提交
Jan 04 Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
把jquery 的dialog和ztree结合实现步骤
Aug 02 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
React实践之Tree组件的使用方法
Sep 30 Javascript
关于Layui Table隐藏列问题
Sep 16 Javascript
jquery实现点击弹出对话框
Feb 08 jQuery
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 Javascript
浅谈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
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
wxPython事件驱动实例详解
2014/09/28 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
python 中split 和 strip的实例详解
2017/07/12 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
在vscode中配置python环境过程解析
2019/09/28 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
python从Oracle读取数据生成图表
2020/10/14 Python
如何删除一个表里面的重复行
2013/07/13 面试题
计算机专业职业生涯规划范文
2014/01/19 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
交通志愿者活动总结
2014/06/27 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
募捐感谢信
2015/01/22 职场文书
清洁工岗位职责
2015/02/13 职场文书
党纪处分决定书
2015/06/24 职场文书
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技