vue で jointjs を動かす
昨日の react で jointjs を動かすのを vue でもやってみた。
初期化は次のようにすすめる
vue init webpack vue-jointjs
cd vue-jointjs
npm install --save jointjs
変更箇所は次の通り
App.vue
<template> <div id="app"> <img src="./assets/logo.png"> <JointJs/> <router-view/> </div> </template> <script> import JointJs from '@/components/JointJs' export default { name: 'App', components: { JointJs } } </script> ...
components/JointJs.vue
<template>
<div>
<div ref="myholder"></div>
</div>
</template>
<script>
import joint from 'jointjs'
export default {
name: 'JointDiagram',
mounted(){
let graph = new joint.dia.Graph
let paper = new joint.dia.Paper({
el: this.$refs.myholder,
model: graph,
width: 600,
height: 100,
gridSize: 1
})
let rect = new joint.shapes.standard.Rectangle();
rect.position(100, 30);
rect.resize(100, 40);
rect.attr({
body: {
fill: 'blue'
},
label: {
text: 'Hello',
fill: 'white'
}
});
rect.addTo(graph);
let rect2 = rect.clone();
rect2.translate(300, 0);
rect2.attr('label/text', 'World!');
rect2.addTo(graph);
let link = new joint.shapes.standard.Link();
link.source(rect);
link.target(rect2);
link.addTo(graph);
}
}
</script>
react とそんなに変わらない。domへの参照方法が違う。すべてのコードはここ
GitHub - ororog/vue-jointjs
react も vue も、外部ライブラリを使う場合は dom への参照を教えてあげれば動かせるっぽいことは理解できた。
ただ、データ Redux (Vuex) の流れに乗せるのは難しそう。