Hur man implementerar D3 lasso-plugin med Angular 2 och Typescript
Jag försöker använda lasso-pluginet skapat av Speros Kokenes (https://github.com/skokenes/D3-Lasso-Plugin) i ett Angular 2-projekt med Typescript. Jag har D3 v4 som fungerar bra i mitt projekt, men när jag försöker lägga till lasso-pluginet stöter jag på problem eftersom det inte har en .d.ts-fil.
Jag har försökt skapa ett utan framgång (utöver min nuvarande kompetensnivå) och jag har försökt att bara inkludera det direkt som ett vanligt JS-skript med syntaxen declare var Lasso: any;. Har någon ett exempel på att implementera ett D3-tillägg med Angular2?
Tack i förväg.
Redigera: Jag har kommit lite närmare och lyckats få plug-in att inkluderas i projektet och koden körs. Dock refererar plug-inet till D3.js kärnfunktionalitet. Tyvärr är d3-objektet odefinierat när plug-inet kallas, min antagning är att det behöver referera till global.d3-referensen, men jag har ännu inte hittat ett sätt att få åtkomst till det. Jag gick tillbaka och tittade på andra d3-plug-ins för ledtrådar om hur man refererar till det, men det verkar som att detta är det enda.
Svar #1
Jag arbetar med samma problem. Jag har kommit på ett par lösningar.
Alternativ 1
Skapa en global variabel i din klass.
import { lasso } from 'd3-lasso';
export class Graph {
private d3: D3;
constructor(
private d3Service: D3Service,
) {
this.d3 = this.d3Service.getD3();
window["d3"] = this.d3Service.getD3(); // <-- here
}
initializeLasso() {
lasso() // <-- no need to use this.d3 as a parameter
.items(this.d3.selectAll(".myCircles"))
.targetArea(this.d3.select(".backgroundRectangle"));
}
}
Alternativ 2
Det är möjligt att bara hacka d3-lasso.js-koden för att ta emot d3-objektet.
function lasso(d3) {...}
och sedan kalla på det i din ts-fil
import { lasso } from 'd3-lasso';
// ...
initializeLasso() {
lasso(this.d3) // <-- use this.d3 as a parameter
.items(this.d3.selectAll(".myCircles"))
.targetArea(this.d3.select(".backgroundRectangle"));
}
Med det sagt, arbetar jag på en annan lösning, eftersom varje gång vi kör npm install, måste jag åtgärda detta igen...
