2016-12-08 53 views
6

Uwielbiam zdolność d3 V4 do tego, żebym czuł się kompletnie niekompetentny. Nie mogę się domyślić, jak utworzyć własny pakiet w pakiecie sieci Web wraz z moimi innymi modułami ... więc zamiast tego po prostu próbuję pobrać pakiet d3 waniliowy i dodać do niego możliwość selekcji wielokrotnej.Jak dodać d3-selection-multi do d3?

Stworzyłem usługę d3 w Angular 2, aby uzależnić wstrzyknięcie obiektu d3 między moje komponenty.

import {Injectable} from "@angular/core"; 

import * as d3 from "d3"; 
import "d3-selection-multi"; 
export type D3 = typeof d3; 

@Injectable() 
export class D3Service { 
    constructor() { 
    } 

    private d3: D3 = d3; 

    getD3 =() => { 
     return this.d3; 
    }; 
} 

Wszystko działa świetnie, dopóki nie próbują uzyskać dostęp do wielu możliwości wyboru, jak przy użyciu .attrs

let test = this.d3.select("body").styles({ 
      "background-color": "#F00", 
      "color": "#00F" 
     }); 

Moja przeglądarka twierdzi, że nie wie, co .attrs jest.

error_handler.js:47 EXCEPTION: Uncaught (in promise): Error: Error in ./ListingComponent class ListingComponent_Host - inline template:0:0 caused by: this.d3.select(...).styles is not a function TypeError: this.d3.select(...).styles is not a function

Próbowałem zostały również połączenia obu ojects z Object.assign bezskutecznie.

Co robię źle? To pewnie coś głupiego.

+0

Trafił na ten sam problem z attrs() ... nie rozwiązał. –

Odpowiedz

-1

Nie ma funkcji o nazwie d3.styles. Spróbuj tego.

this.d3.select("body").style("background-color", "#F00") 
         .style("color", "#00F"); 
+2

Istnieje "style" w d3 selection-multi. Pytanie OP jest właśnie o tym. –