在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 相关文章推荐
javascript firefox兼容ie的dom方法脚本
May 18 Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
Aug 03 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
原生javascript实现图片按钮切换
Jan 12 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
JavaScript定时器制作弹窗小广告
Feb 05 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
Jul 23 Javascript
vue实现留言板todolist功能
Aug 16 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
php中filter_input函数用法分析
2014/11/15 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
javascript动态加载二
2012/08/22 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python中的包和模块实例
2014/11/22 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
大学生自荐信
2013/12/11 职场文书
文明倡议书范文
2014/04/15 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
大班下学期个人总结
2015/02/13 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
Python的property属性详细讲解
2022/04/11 Python
Java对文件的读写操作方法
2022/04/29 Java/Android