在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 相关文章推荐
jquery 经典动画菜单效果代码
Jan 26 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
Jul 07 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 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过滤危险html代码的函数
2008/07/22 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
常用的javascript设计模式
2017/01/11 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
python3.3实现乘法表示例
2014/02/07 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
python中执行shell的两种方法总结
2017/01/10 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python实现Virginia无密钥解密
2019/03/20 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
解决Python对齐文本字符串问题
2019/08/28 Python
python属于解释语言吗
2020/06/11 Python
python中如何打包用户自定义模块
2020/09/23 Python
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
入团者的自我评价分享
2013/12/02 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
幼儿教师个人总结
2015/02/05 职场文书
比赛主持人开场白
2015/05/29 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
Mysql binlog日志文件过大的解决
2021/10/05 MySQL