【发布时间】:2017-04-16 14:34:31
【问题描述】:
我正在尝试将 D3 v4 与 Angular 2 (Typescript) 一起使用。我目前正在研究 D3 v4。我能够在stackoverflow中遵循一些答案,但没有成功。我已经导入了大部分 D3 库及其类型(我使用的是 TS 2.0),并且在我的组件文件中我需要 import * as d3 from 'd3';。对我来说,这个问题可能是 Angular 2、Typescript 和 3rd 方库......到目前为止一团糟。
在我的组件文件中,我有一些这样的代码:
let arc = d3.arc()
.outerRadius(chartHeight / 2)
.innerRadius(chartHeight / 4)
.padAngle(0.03)
.cornerRadius(8);
let pieG = chartLayer.selectAll("g")
.data([data])
.enter()
.append("g")
.attr("transform", "translate(" + [chartWidth / 2, chartHeight / 2] + ")");
let block = pieG.selectAll(".arc")
.data(arcs);
let newBlock = block.enter().append("g").classed("arc", true);
newBlock.append("path")
.attr("d", arc)
.attr("id", function (d, i) {
return "arc-" + i
})
.attr("stroke", "gray")
.attr("fill", function (d, i) {
return d3.interpolateCool(Math.random())
});
如您所见,我在第一行定义了 arc 并在第 19 行使用它,但出现错误:
[at-loader] src\piechart\piechart.component.ts:19:28
Argument of type 'Arc<any, DefaultArcObject>' is not assignable to parameter of type '(this: BaseType, datum: PieArcDatum<number | { valueOf(): number; }>, index: num
ber, groups: Base...'.
Types of parameters 'd' and 'datum' are incompatible.
Type 'PieArcDatum<number | { valueOf(): number; }>' is not assignable to type 'DefaultArcObject'.
Property 'innerRadius' is missing in type 'PieArcDatum<number | { valueOf(): number; }>'.
Arch 和 arc 似乎是在 d3-shape 类型和 d3-path 类型中定义的。
任何可以帮助我的人...我花了几天时间尝试使用 angular 2、TS 和 D3 v4 进行 POC,但到目前为止没有运气...我已经在网上看到了所有关于它的文章,其中大多数都有旧版本或不工作。我也觉得这是一个打字问题。 Angular 2 和第三方库是一场噩梦。
【问题讨论】:
-
将
.attr("d", arc)更改为.attr("d", function(d) { console.log(d); arc(d); }使用console.log的输出更新您的问题... -
newBlock.append("path") .attr("d", (d) => { console.log(d); arc(d); }) .attr("id", (d, i) => { return "arc-" + i })我收到两个 ts 错误...和 4 个日志如下:Log: {"data":{"name":"hoge","value":100},"index":0,"value":100,"startAngle":0,"endAngle":0.7075659129706742,"padAngle":0} -
试图复制您的问题here,但没有成功。不过,我不确定 plunker 如何编译打字稿:(
-
谢谢马克。这令人沮丧。我切换到 d3 v3.5.5,这个版本的最新类型是 3.5.36。使用此代码时:` let pie = d3.layout.pie() .sort(null) .value((d) => { return d.population; }); ` 我收到一个错误:[at-loader] src/piechart/piechart.component.ts:39:26 类型“数字”上不存在属性“人口”。但是,如果我只是将类型添加到任何它的“d”(内部值)中。我认为问题出在打字上,或者我做错了什么但无法弄清楚。
-
在显示圆弧/饼图等之前,您是否尝试过在 SVG 中显示最基本的 D3 图像或形状。我正在经历与您相同的繁琐工作,试图获得正确的 d3 版本、类型、Angular2、typeScript 设置。这并不容易!当基础知识不起作用时,我能够将其范围缩小到类型。
标签: angular d3.js typescript typescript-typings