Angular Primeng: ERROR ReferenceError: Chart is not defined at UIChart.initChart (chart.js:53)

Angular Primeng: ERROR ReferenceError: Chart is not defined at UIChart.initChart (chart.js:53)

Angular Primeng:错误 ReferenceError:未在 UIChart.initChart 定义图表(chart.js:53)

导入:

"../node_modules/chart.js/dist/Chart.js",

"../node_modules/chart.js/dist/Chart.bundle.js",

"../node_modules/chart.js/dist/Chart.min.js",

"../node_modules/chart.js/dist/Chart.bundle.min.js"

import { Chart } from 'chart.js';

import { ChartModule } from 'primeng/primeng';

从你的问题和代码来看,你实现这个目标所遵循的步骤不是很清楚。如果你正确地遵循 Primeng 文档,你可以很容易地做到这一点。 下面是我按照 运行 绘制图表的详细步骤。

我正在使用:

  • Angular 6
  • primeng: ^6.0.0
  • chart.js: ^2.7.2

首先安装chart js

npm install chart.js --save

现在将 chartjs 添加到您的 angular.json 文件中。

"scripts": [
    "../node_modules/chart.js/dist/Chart.js",
]

没有必要在您的脚本中使用“../”。如果您的 node_module 和 angular.json 文件处于同一级别,则使用如下所示,这是默认行为:

 "scripts": [
    "node_modules/chart.js/dist/Chart.js",
]

在app.module.ts

只导入 ChartModule,不要像您在问题中提到的那样从 Chart.js 导入。

import {ChartModule} from 'primeng/chart';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    ...
    ChartModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

现在你 component.html :

<p-chart type="line" [data]="data"></p-chart>

component.ts:

data: any;
ngOnInit() {

this.data = {
            labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
            datasets: [
                {
                    label: 'First Dataset',
                    data: [65, 59, 80, 81, 56, 55, 40],
                    fill: false,
                    borderColor: '#4bc0c0'
                },
                {
                    label: 'Second Dataset',
                    data: [28, 48, 40, 19, 86, 27, 90],
                    fill: false,
                    borderColor: '#565656'
                }
            ]
        }
}

这就是我们需要做的。

这个问题已经有了一个可接受的答案,但是,为了记录,我 运行 在 Angular 9 中遇到了完全相同的“chart.js”错误,根本原因是我正在导入没有完整路径的组件。我是这样做的:

import {DropdownModule} from "primeng";

而不是这个:

import {DropdownModule} from "primeng/dropdown";

这给了我“chart.js”错误...一旦我导入了正确的路径(底部),chart.js 错误就消失了。我在 Whosebug 上看到了一些其他类似的响应,其他组件甚至在以前的 angular 版本中也有类似的问题(错误导入某些组件)。因此,如果您没有以正确的方式导入组件,这肯定仍然会在 angular9 中发生。

似乎所有这些答案都集中在正确安装 PrimeNG 和 Chart.js 上。您需要检查的另一件事是是否将正确的 JS 文件与您的应用程序捆绑和构建。这可能是 Webpack / CommonJS 的问题。

在 Angular 和其他平台中,构建您的应用程序时,它会将您的脚本捆绑到一个文件中,并将该文件附加到您的索引页。如果 Chart.JS 脚本没有被捆绑,Chart,class PrimeNG 依赖于构建你的图表将不会存在。

最简单的答案可能是在标记中添加 Chart.JS 脚本引用。

我有同样的错误,但我最终解决了。 我正在与

合作
  • Angular 8
  • primeng: ^8.0.0

当我刚刚安装 Chart.Js 使用

npm install chart.js --save

已安装最新版本的 Chart.js (3.3.2),上面的错误也显示给我。

Chart.js 的官方文档中的这一段让我感到困惑 https://www.chartjs.org/docs/master/developers/ 我引用他们的话:

Previous versions

To migrate from version 2 to version 3, please see the v3 migration guide.

Version 3 has a largely different API than earlier versions.

Most earlier version options have current equivalents or are the same.

Please note - documentation for previous versions are available online or in the GitHub repo.

然后我降级为 Chart.js@2.9.2 一切顺利。