Home >Web Front-end >JS Tutorial >How to use jointjs attributes in vue

How to use jointjs attributes in vue

php中世界最好的语言
php中世界最好的语言Original
2018-05-03 14:38:202050browse

This time I will show you how to use jointjs attributes in vue. What are the precautions for using jointjs attributes in vue. The following is a practical case, let's take a look.

Regarding the issue of introducing joint.js into vue, I searched a lot on the Internet before, but no definite answer was given. After two days of tinkering, I finally figured it out and made a record.

First of all, I referred to an article from stack
overflow. After reading this article, you should at least have a rough idea of ​​how to do it. Let’s take a closer look. Let’s take a look:

First run npm install jointjs --save

in the vue project, and then in the

entry file

, mine is main.js, it may also be app.js Add the following two lines and use joint.js and jquery as global variables

window.$ = require('jquery');
window.joint = require('jointjs');
It should be noted here that joint.js relies on backbone, jquery and lodash. When introducing them through script, these need to be introduced one by one. files, but it is not required when passing vue's npm. The joint.js introduced by npm has already encapsulated these by default. It is not enough to introduce it in this way. You may encounter the problem that the diagram can be loaded normally, but cannot be dragged. When encountering these problems, it is usually caused by the conflict between joint.js and the environment in your own vue project, resulting in the inability to read. Fetch or read error.

I installed element, iview, axios, vuex, and jquery in my original project. After installing joint.js, jointjs could not be loaded normally. Later, I rebuilt a project and only installed element, axios, and vuex. , in order to avoid conflicts between jquery and jquery in joint.js, jquery was not installed later.

Is this enough? Can I run the example in the link above? Like this:

<template>
  <p>
    <h1>Home</h1>
    <p id="myholder"></p>
  </p>
</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, notice that the rendering is placed in the

lifecycle

of created. According to the lifecycle of vue, the el of the joint's mounting p cannot be found: $('#myholder'), that is to say, an error will be reported when running. My solution is to put a click on p, take the content of joint out of created, and put it in methods. It needs to be clicked before it can be displayed. , it is not perfect yet and needs to be improved (~ ̄▽ ̄)~

In other words, the code will become like this:

<template>
  <p>
    <p id="myholder" @click="click_joint"></p>
  </p>
</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>
To point out, just install jointjs when introduced through npm Yes, there is no need to install lodash, backbone, jquery, or import the joint.css file into the page. The author previously introduced joint.js through script. I tried many times without success. I kept getting errors when reading the joint.js file. If other friends try successfully, please feel free to share.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Angular CLI blueprint generation code


The difference between computed and methods in Vue

The above is the detailed content of How to use jointjs attributes in vue. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn