【发布时间】:2014-07-12 15:56:31
【问题描述】:
我正在使用 d3.js 创建一个简单的图表。当我将鼠标悬停在一个圆圈上时,我想在工具提示中看到一些信息。图表的所有代码都在自定义指令中,当加载数据时(我使用的是 scope.$watch),我绘制图表没有问题。
工具提示出现问题。我想使用 ng-if 仅在存在数据时才显示某些内容,但它不起作用。我不知道是否存在范围问题,但这里是工具提示的代码。请注意,它在自定义指令的链接函数中的范围内。$watch:
var showPopup = function(el, data) {
var svgPosition = $('#chart').position(),
offsetTop = svgPosition.top,
offsetLeft = svgPosition.left,
circle = d3.select(el),
top = parseInt(circle.attr('cy'), 10),
left = parseInt(circle.attr('cx'), 10),
r = parseInt(circle.attr('r'), 10),
pop = d3.select('#tooltip');
pop
.html(
'<div class="tooltip-wrapper">' +
'<span class="number">' + data.week + '.</span>' +
'<span class="person"><a href="#/person/' + data.name + '">' + data.name + '</a></span>' +
'<ul>' +
'<li ng-if="data.numbers">Numbers: ' + data.numbers + '</li>' +
'</ul>' +
'</div>'
)
.style('opacity', 1)
.style('top', top + offsetTop + margin.top + 'px')
.style('left', left + offsetLeft + margin.left + 'px');
};
li 仍然显示为数字:未定义。 任何想法如何让这个工作?谢谢。
【问题讨论】:
-
不,没有错误。 style() 是一个 d3 的东西。
-
我不认为 ng-if 将与在链接函数中动态设置 html 一起工作,因为编译永远不会为它运行,即角度永远不知道有一个 ng-if,因为它是一个指令。您是否尝试过将其移至指令的编译函数?
-
我没有。不知道该怎么做。在 $watch 里面,我有一些东西会触发这个函数,它也在 $watch 里面。如果 showPopup 和事件处理程序封装在不同的函数中,我将如何触发?
-
如果没有看到更多的范围就真的帮不上忙。尝试将
data记录到控制台以查看它是什么 -
data 是一个包含 5 个对象的列表,每个对象都有名称、日期,有些还有编号。
标签: javascript angularjs d3.js