我刚刚开始学习D3,并且试图将散点图集成到Vue.js组件中。一切顺利,直到我想在鼠标悬停上集成工具提示。
mouseover函数的原始代码如下所示:
var mousemove = function(d) {
tooltip
.html("Sold quantity: " + d.quantity + "<br> Object price: " + d.price)
.style("left", (d3.mouse(this)[0]+90) + "px")
.style("top", (d3.mouse(this)[1]) + "px")
};
然后,将其附加到on事件方法。
现在,如果我尝试获取代码并将其在Vue.js中使用,则会收到错误消息:
未捕获的TypeError:node.getBoundingClientRect不是函数
我知道为什么会这样。基本上,该this
实例现在是整个Vue.js组件实例。以前,this
仅是将鼠标悬停在DOM元素上。
在线上有一些解决方案,但是没有一个解决方案可以解决这种特殊情况,在这种情况下,有人只想访问/设置正确的this
上下文以供d3使用。
如果出于某种原因不能this
在D3侦听器中使用(vue.js只是这些原因之一),请结合使用第三和第二个参数:
var mousemove = function(d,i,n) {
tooltip
.html("Sold quantity: " + d.quantity + "<br> Object price: " + d.price)
.style("left", (d3.mouse(n[i])[0]+90) + "px")
.style("top", (d3.mouse(n[i])[1]) + "px")
};
简而言之,更改this
为a[b]
,其中a
第三个参数b
是第二个参数(在大多数D3代码中,它们是n
为节点和i
索引命名的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句