【发布时间】:2016-06-13 02:04:50
【问题描述】:
我已经构建了一个 Angular 指令来显示 D3 可视化。我在我的 y 轴上的 tickFormat 函数中使用 $filter,如下所示:
ySalesAxis = d3.svg.axis()
.orient('left')
.ticks(6)
.scale(ySalesScale)
.tickFormat(function(d) {
return $filter('formatSalesValue')(d.value, 'USD');
});
我看到的问题是,当页面首次加载时,这些刻度标签都没有出现。事实上,如果我 console.log($filter('formatSalesValue')(d.value, 'USD')) 我得到 6 undefined(因为我的 ticks 属性设置为 6)。但是,一旦我采取行动,例如在画笔过滤器中单击,刻度标签就会显示格式正确。
我的formatSalesValue 过滤器调用了一项服务(异步操作),因为有几十种货币循环进出系统,我从数据库中检索了这些货币的详细信息。我确信这就是我的刻度标签未定义的原因。我可以做些什么来确保这些值在页面加载后立即出现?注意:我尝试将我的 tickFormat 函数包装在对 scope.$apply 的调用中,但我收到了 digest already in progress 错误。
【问题讨论】:
-
可能是在摘要循环之外调用 tickFormat 的问题。
-
如果是这样,在你的 return 语句之前添加 scope.$apply() - 假设你在一个指令和链接函数中
-
创建复制问题的演示
-
有什么办法可以把它放进一个codepen或什么的?我刚刚尝试从 .tween() 调用 $filter ,一切似乎都正常。值 d.value 是 formatSalesValue 所期望的格式吗?
标签: javascript angularjs d3.js