如何在Angular2中实现chart.js

rva*_*iev 16 chart.js angular

我正在使用Angular2-rc4和angular-cli webpack,并希望实现chart.js库.

我使用以下方法将chart.js安装到我的项目中:

npm install chart.js --save

然后我尝试在我的组件中导入chart.js:

import {Component, OnInit, ViewChild} from '@angular/core';
import 'chart.js/src/chart.js';
declare let Chart;

@Component({
  selector: 'app-dashboard',
  templateUrl: 'dashboard.component.html',
  styleUrls: ['dashboard.component.scss']
})
export class DashboardComponent {

  chart: Chart;

}
Run Code Online (Sandbox Code Playgroud)

但我在控制台日志中出错:

[default] /Applications/MAMP/htdocs/bridge/src/app/dashboard/dashboard.component.ts:12:9 
Cannot find name 'Chart'.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

iMe*_*iMe 30

我有一个类似的问题,结果我引用了一个旧的例子.

首先,正如您已经正确完成的那样,使用NPM安装库:

npm install chart.js --save
Run Code Online (Sandbox Code Playgroud)

然后,在组件中,导入库:

import Chart from 'chart.js';
Run Code Online (Sandbox Code Playgroud)

要使用快速示例启动并运行,请查看Chart.js 文档中的示例代码或查看下面的示例.


dashboard.component.ts

import Chart from 'chart.js';
import { ViewChild, Component, ElementRef, OnInit } from '@angular/core';

@Component({
    selector: 'app-dashboard',
    template: '<canvas #donut></canvas>'
})

export class DashboardComponent implements OnInit {
    @ViewChild('donut') donut: ElementRef;

    constructor(
    ) { }

    ngOnInit() {
        let donutCtx = this.donut.nativeElement.getContext('2d');

        var data = {
            labels: [
                "Value A",
                "Value B"
            ],
            datasets: [
                {
                    "data": [101342, 55342],   // Example data
                    "backgroundColor": [
                        "#1fc8f8",
                        "#76a346"
                    ]
                }]
        };

        var chart = new Chart(
            donutCtx,
            {
                "type": 'doughnut',
                "data": data,
                "options": {
                    "cutoutPercentage": 50,
                    "animation": {
                        "animateScale": true,
                        "animateRotate": false
                    }
                }
            }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)


Kar*_*k P 21

在模板中不要忘记将画布括在div中.如果canvas是dom中custom定制的直接子项,则可能无法加载图表.

<div><canvas id="myChart"></canvas></div>
Run Code Online (Sandbox Code Playgroud)

我浪费了很多时间来发现这个问题.


小智 5

这是npmjs中少数最好的模块:

angular2-chartjs

然后你可以在你的模块中使用它:

import { ChartModule } from 'angular2-chartjs';

@NgModule({
  imports: [ ChartModule ]
  // ...
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)

在html模板中:

<chart [type]="type" [data]="data" [options]="options"></chart>
Run Code Online (Sandbox Code Playgroud)

别忘了用数据填写;)