Ich versuche, D3 v4 mit Angular 2 (Typescript) zu verwenden. Ich schaue gerade in D3 v4. Ich konnte einige der Antworten hier im Stackoverflow mit ähnlichen Problemen ohne Erfolg folgen. Ich habe die meisten D3-Bibliotheken und ihre Typisierungen importiert (ich verwende TS 2.0) und in meiner Komponentendatei benötige ich import * as d3 from 'd3';
. Dieses Problem für mich könnte Angular 2, Typescript und 3rd-Party-Bibliotheken sein ... bis jetzt ein Durcheinander.D3, TS und Angular 2
In meiner Komponentendatei habe ich einige Code wie folgt aus:
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())
});
Wie Sie sehen, habe ich in der ersten Zeile definierten Bogen und dessen Verwendung in Zeile 19, aber ich erhalte eine Fehlermeldung:
[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; }>'.
Der Bogen und der Bogen scheinen in den d3-Form-Typen und auch in den d3-Pfad-Typen definiert zu sein.
Jeder, der mir helfen kann ... Ich habe Tage damit verbracht, ein POC mit eckigen 2, TS und D3 v4 zu machen und bis jetzt kein Glück ... Ich habe alle Artikel online darüber und die meisten von ihnen gesehen ältere Version haben oder nicht funktionieren. Es scheint mir auch, dass dies ein Tippproblem ist. Angular 2 und Third Party Libraries sind ein Albtraum.
Ändern Sie '.attr (" d ", Bogen)' zu '.attr (" d ", Funktion (d) {console.log (d); Bogen (d);} aktualisieren Sie Ihre Frage mit der Ausgabe dieses 'console.log' ... – Mark
' newBlock.append ("Pfad") .attr ("d", (d) => { console.log (d); Bogen (d); }) .attr ("id", (d, i) => { return "Bogen-" + i }) ' ich zwei ts Fehler ... und die 4-Protokolle wie unten: 'Log: { "data": { "name": "hoge", "Wert": 100}, "Index": 0, "Wert": 100, "startangle": 0, "endAngle": 0 gewonnen.7075659129706742, "padAngle": 0} ' – btinoco
Versuchen Sie, Ihr Problem [hier] (https://plnkr.co/edit/sxTCbOmOU40oYByNOH0p?p=preview) ohne Erfolg zu replizieren. Ich bin mir nicht sicher, wie bottle kompiliert Typoskript, obwohl :( – Mark