Adding a Vue.js v-on event to D3 SVG element

2019-04-13 01:46发布

Is it possible to add a VueJS v-on event to an SVG element in D3? I want to use the v-on.mouseover functionality to each rectangle element of an SVG. I am trying to do so by adding v-on:mouseover="active = !active" as an attribute in D3, as in the following snippet:

h.selectAll('.bar')
  .data(myCSVdata)
  .enter()
  .append('g')
  .attr('v-on:mouseover', 'active = !active')
  .attr('class', 'bars')
  .append('rect')

but D3 seems to strip out the v-on: and I am left with

<g mouseover="active = !active" class="bars">

1条回答
来,给爷笑一个
2楼-- · 2019-04-13 02:08

The problem here is that the colon normally defines the namespace, and D3 will think that v-on is a namespace.

There is a solution: add another colon before it:

.attr(':v-on:mouseover', 'active = !active')

Here is a demo:

var div = d3.select("body")
  .append("div")
  .attr(':v-on:mouseover', 'active = !active');
  
console.log(div.node())
<script src="https://d3js.org/d3.v4.min.js"></script>

查看更多
登录 后发表回答