gpt4 book ai didi

javascript - 在 Angular 4 上使用 Chart.js

转载 作者:可可西里 更新时间:2023-11-01 01:35:59 24 4
gpt4 key购买 nike

我正在尝试将 Chart.js 与 Angular 4 一起使用,我在 chart.js 文档中看到了一个示例,但它使用 < script > 标记来提取脚本,因此它在组件上不起作用。这就是我试图适应 Angular 的方式:

TS

export class GraphicsComponent implements OnInit {

ctx = document.getElementById("myChart");
myChart = new Chart(this.ctx, {
type: 'pie',
data: {
labels: ["New", "In Progress", "On Hold"],
datasets: [{
label: '# of Votes',
data: [1,2,3],
backgroundColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: false,
display:true
}
});

constructor() { }

ngOnInit() {
}

}

HTML

<canvas id="myChart" width="700" height="400"></canvas>

知道如何让它发挥作用吗?

编辑:我已经通过导入更新了我的代码,但我现在收到错误消息。

导入代码:

import * as Chart from 'chart.js'

Chrome 控制台错误:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'length' of null
TypeError: Cannot read property 'length' of null
at Object.acquireContext (platform.dom.js:333)
at Chart.construct (core.controller.js:74)
at new Chart (core.js:42)
at new GraphicsComponent (graphics.component.ts:12)
at createClass (core.es5.js:10922)
at createDirectiveInstance (core.es5.js:10756)
at createViewNodes (core.es5.js:12197)
at createRootView (core.es5.js:12092)
at callWithDebugContext (core.es5.js:13475)
at Object.debugCreateRootView [as createRootView] (core.es5.js:12792)
at Object.acquireContext (platform.dom.js:333)
at Chart.construct (core.controller.js:74)
at new Chart (core.js:42)
at new GraphicsComponent (graphics.component.ts:12)
at createClass (core.es5.js:10922)
at createDirectiveInstance (core.es5.js:10756)
at createViewNodes (core.es5.js:12197)
at createRootView (core.es5.js:12092)
at callWithDebugContext (core.es5.js:13475)
at Object.debugCreateRootView [as createRootView] (core.es5.js:12792)
at resolvePromise (zone.js:795)
at resolvePromise (zone.js:766)
at zone.js:844
at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:425)
at Object.onInvokeTask (core.es5.js:3881)
at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:424)
at Zone.webpackJsonp.../../../../zone.js/dist/zone.js.Zone.runTask (zone.js:192)
at drainMicroTaskQueue (zone.js:602)
at <anonymous>

最佳答案

您可以安装该包,以及在 Angular 等 typescript 环境中实现完整功能的类型:

npm install --save chart.js && npm install --save-dev @types/chart.js

然后在您的组件中,您现在可以import * as Chart from 'chart.js' 并在您的 typescript 环境中使用它。查看this example使用 typescript 的实现方法。

因为您需要从 DOM 中获取 Canvas ,所以您需要确保在尝试访问它之前已呈现它。这可以通过 AfterViewInit 来完成。

import { Component, AfterViewInit } from '@angular/core';
import * as Chart from 'chart.js'

export class MyChartComponent implements AfterViewInit {

canvas: any;
ctx: any;

ngAfterViewInit() {
this.canvas = document.getElementById('myChart');
this.ctx = this.canvas.getContext('2d');
let myChart = new Chart(this.ctx, {
type: 'pie',
data: {
labels: ["New", "In Progress", "On Hold"],
datasets: [{
label: '# of Votes',
data: [1,2,3],
backgroundColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)'
],
borderWidth: 1
}]
},
options: {}
});
}

}

关于javascript - 在 Angular 4 上使用 Chart.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com