如何在Angular2

时间:2017-05-14 07:37:05

标签: javascript angular typescript typescript-typings d3pie.js

我想在我的d3pie.js项目中使用Angular2库,但不知道如何使用打字稿定义导入它。

我使用以下命令安装了d3d3pie.js

npm install --save d3 d3pie
npm install --save-dev @types/d3 @types/d3pie

然而,当我尝试像往常一样导入@types定义时。

import * as d3pie from 'd3pie';

我收到错误:

File '~/foobar/node_modules/@types/d3pie/index.d.ts' in not a module.

通过简单的导入,例如:

import 'd3pie';

我在我的应用的开发控制台中收到此错误:

ERROR Error: Uncaught (in promise): ReferenceError: d3pie is not defined

这是我的component.ts文件的内容,该模板具有test div

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-pie-chart',
  templateUrl: './pie-chart.component.html',
  styleUrls: ['./pie-chart.component.scss']
})
export class PieChartComponent implements OnInit {
  constructor() {
  }

  ngOnInit() {
    declare var d3pie: any;
    this.testDraw();
  }

  public testDraw() {
    const chart = new d3pie('test',
      {
        header: {
          title: {
            text: '',
            color: '#333333',
            fontSize: 18,
            font: 'arial'
          },
          subtitle: {
            color: '#666666',
            fontSize: 14,
            font: 'arial'
          },
          location: 'top-center',
          titleSubtitlePadding: 8
        },
        footer: {
          text: '',
          color: '#666666',
          fontSize: 14,
          font: 'arial',
          location: 'left'
        },
        size: {
          canvasHeight: 500,
          canvasWidth: 500,
          pieInnerRadius: 0,
          pieOuterRadius: null
        },
        data: {
          sortOrder: 'none',
          smallSegmentGrouping: {
            enabled: false,
            value: 1,
            valueType: 'percentage',
            label: 'Other',
            color: '#cccccc'
          },
          content: []
        },
        labels: {
          outer: {
            format: 'label',
            hideWhenLessThanPercentage: null,
            pieDistance: 30
          },
          inner: {
            format: 'percentage',
            hideWhenLessThanPercentage: null
          },
          mainLabel: {
            color: '#333333',
            font: 'arial',
            fontSize: 10
          },
          percentage: {
            color: '#dddddd',
            font: 'arial',
            fontSize: 10,
            decimalPlaces: 0
          },
          value: {
            color: '#cccc44',
            font: 'arial',
            fontSize: 10
          },
          lines: {
            enabled: true,
            style: 'curved',
            color: 'segment' // 'segment' or a hex color
          }
        },
        effects: {
          load: {
            effect: 'default', // none / default
            speed: 1000
          },
          pullOutSegmentOnClick: {
            effect: 'bounce', // none / linear / bounce / elastic / back
            speed: 300,
            size: 10
          },
          highlightSegmentOnMouseover: true,
          highlightLuminosity: -0.2
        },
        tooltips: {
          enabled: false,
          type: 'placeholder', // caption|placeholder
          string: '',
          placeholderParser: null,
          styles: {
            fadeInSpeed: 250,
            backgroundColor: '#000000',
            backgroundOpacity: 0.5,
            color: '#efefef',
            borderRadius: 2,
            font: 'arial',
            fontSize: 10,
            padding: 4
          }
        },

        misc: {
          colors: {
            background: null, // transparent
            segments: [
              '#2484c1', '#65a620', '#7b6888', '#a05d56', '#961a1a',
              '#d8d23a', '#e98125', '#d0743c', '#635222', '#6ada6a',
              '#0c6197', '#7d9058', '#207f33', '#44b9b0', '#bca44a',
              '#e4a14b', '#a3acb2', '#8cc3e9', '#69a6f9', '#5b388f',
              '#546e91', '#8bde95', '#d2ab58', '#273c71', '#98bf6e',
              '#4daa4b', '#98abc5', '#cc1010', '#31383b', '#006391',
              '#c2643f', '#b0a474', '#a5a39c', '#a9c2bc', '#22af8c',
              '#7fcecf', '#987ac6', '#3d3b87', '#b77b1c', '#c9c2b6',
              '#807ece', '#8db27c', '#be66a2', '#9ed3c6', '#00644b',
              '#005064', '#77979f', '#77e079', '#9c73ab', '#1f79a7'
            ],
            segmentStroke: '#ffffff'
          },
          gradient: {
            enabled: false,
            percentage: 95,
            color: '#000000'
          },
          canvasPadding: {
            top: 5,
            right: 5,
            bottom: 5,
            left: 5
          },
          pieCenterOffset: {
            x: 0,
            y: 0
          },
          cssPrefix: null
        },
        callbacks: {
          onload: null,
          onMouseoverSegment: null,
          onMouseoutSegment: null,
          onClickSegment: null
        }
      });
  }
}

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您使用的是角度CLI,则可以执行以下操作:

添加到angular-cli.json

"scripts": ["./node_modules/d3pie/d3pie/d3pie.min.js",]

然后将其添加到您的typings.d.ts

 declare var d3pie:any;

答案 1 :(得分:0)

使用以下命令安装d3,d3pie.js:

npm install --save d3
npm install --save-dev @types/d3 @types/d3pie

请注意,npm的d3pie包已过时(因为它仍使用d3 v3)

首选最新版本 https://github.com/benkeen/d3pie/tree/master/d3pie

npm install --save benkeen/d3pie

使用

修改.angular-cli.json
"scripts": [
        "../node_modules/d3/build/d3.js",
        "../node_modules/d3pie/d3pie/d3pie.js"
],

在组件内导入d3pie

import 'd3pie'

利润!