angular - 在生产模式下构建 Angular App 时,dc 图表看起来不同
问题描述
我目前正在开发一个使用d3、dc 和 crossfilter来呈现一些图表的应用程序。
- 交叉过滤器2:v1.4.6
- d3:v3.5.17
- 直流:v2.2.1
我正在努力使 Y 刻度只显示不带小数点的整数。
当我使用“ng serve”在开发模式下运行我的应用程序时,这是有效的。
但是当我在生产模式下构建我的应用程序时,Y 比例是不一样的。
这里唯一不同的是使用“ng serve”或“ng build --prod”。
设置刻度的代码是
/* grpProductType is a crossfilter.Group*/
const maxY = d3.max(d3.values(grpProductType))(1)[0]?.value;
if (maxY < 7) {
/* dcStepsByProductType is a dc.BarChart*/
dcStepsByProductType.yAxis().ticks(maxY);
}
我已经设法将导致问题的原因缩小到某一点。问题取决于angular.json文件下的属性:
项目 => [应用名称] => 架构师 => 构建 => 配置 => 生产 => 优化 => 脚本
如果此标志为真,则发生逻辑错误,如果为假,则应用程序运行正常。
似乎调用“all”函数的返回值是不同的。
我的问题是这可能是什么原因?
解决方案
您的代码和调试输出指定
d3.values(grpProductType)
但它看起来像是grpProductType
一个交叉过滤组对象,所以这会产生一个对象方法的数组:
然后您的代码继续计算这些函数的最大值,然后使用参数调用该函数1
,获取结果数组的第一个元素,并读取其字段(value
如果有):
const maxY = d3.max(d3.values(grpProductType))(1)[0]?.value;
我认为这一定是自动完成驱动的软件开发,因为我的意图是难以理解的。它可能在开发模式下工作,因为函数的最大值是.top()
(按名称?)但在优化的 prod 模式下,函数具有较短的无意义名称,因此您调用不同的函数。
无论如何,它是一个交叉过滤组对象,所以你应该直接调用.all()来检索 bin。这将返回一个对象数组{key,value}
,因此更好的计算方法maxY
是:
const maxY = d3.max(grpProductType.all(), d => d.value);
或者,如果您更喜欢使用.top()
:
const maxY = grpProductType.top(1)[0].value;
推荐阅读
- memory - Uwp SpeechSynthesizer/MediaPlayer 内存泄漏
- java - 包含返回 Mono 的函数时,我应该如何使用 Mono.zipWith?
- ios - 如何从扩展中的函数创建 UIActivityIndicator 计算属性
- ruby-on-rails - Rails ActiveRecord :pluck 和 :map 返回两个不同的值 - 为什么?
- python - 假设场景:Python 独立可执行文件以实现未来机器兼容性
- c# - 使用 IL2CPP 在 Visual Studio 中调试 Unity Hololens?
- java - C# 和 Java 服务器之间的 TCP 通信
- openssl - 如何使用 rust-openssl 创建与 `-starttls smtp` 等效的连接?
- java - Spring中类级别的多个requestMappings的Swagger-annotations
- arrays - 检查字符串数组中第一个元素的最后一个字符是否与下一个元素的最后一个字符相同