You need to enable JavaScript to run this app. Angular 11项目集成ng2-charts编译报错的最优解决方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

Angular 11项目集成ng2-charts编译报错的最优解决方案咨询

ng2-charts集成Angular11编译报错问题

我计划为我的Angular项目安装ng2-charts,官方地址为:https://valor-software.com/ng2-charts/
核心问题是我修改angular.json文件后,编译器抛出了多处错误,相关信息如下:

barras.component.ts代码

import { Component, OnInit } from '@angular/core';
import { ChartDataSets } from 'chart.js';
import { ChartOptions, ChartType } from 'chart.js';
import { Label } from 'ng2-charts';

@Component({
  selector: 'app-barras',
  templateUrl: './barras.component.html',
  styles: [
  ]
})
export class BarrasComponent implements OnInit {

  public barChartOptions: ChartOptions = {
    responsive: true,
    // We use these empty structures as placeholders for dynamic theming.
    scales: { xAxes: [{}], yAxes: [{}] },
    plugins: {
      datalabels: {
        anchor: 'end',
        align: 'end',
      }
    }
  };
  public barChartLabels: Label[] = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
  public barChartType: ChartType = 'bar';
  public barChartLegend = true;
  public barChartPlugins = [pluginDataLabels];

  public barChartData: ChartDataSets[] = [
    { data: [65, 59, 80, 81, 56, 55, 40], label: 'Series A' },
    { data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B' }
  ];

  constructor() { }

  ngOnInit(): void {
  }

  public randomize(): void {
    // Only Change 3 values
    this.barChartData[0].data = [
      Math.round(Math.random() * 100),
      59,
      80,
      (Math.random() * 100),
      56,
      (Math.random() * 100),
      40 ];
  }

package.json依赖配置

"dependencies": {
    "@angular/animations": "~11.2.9",
    "@angular/common": "~11.2.9",
    "@angular/compiler": "~11.2.9",
    "@angular/core": "~11.2.9",
    "@angular/forms": "~11.2.9",
    "@angular/platform-browser": "~11.2.9",
    "@angular/platform-browser-dynamic": "~11.2.9",
    "@angular/router": "~11.2.9",
    "chart.js": "^3.2.1",
    "ng2-charts": "^2.4.2",
    "rxjs": "~6.6.0",
    "tslib": "^2.0.0",
    "zone.js": "~0.11.3"
  },

angular.json配置

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "graficasApp": {
      "projectType": "application",
      "schematics": {
        "@schematics/angular:application": {
          "strict": true
        }
      },
      "root": "",
      "sourceRoot": "src",
      "prefix": "app",
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "allowedCommonJsDependencies": ["chart.js"],
            "outputPath": "dist/graficasApp",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.app.json",
            "aot": true,
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "src/styles.css"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "namedChunks": false,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "budgets": [
                {
                  "type": "initial",
                  "maximumWarning": "500kb",
                  "maximumError": "1mb"
                },
                {
                  "type": "anyComponentStyle",
                  "maximumWarning": "2kb",
                  "maximumError": "4kb"
                }
              ]
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "graficasApp:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "graficasApp:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "graficasApp:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.spec.json",
            "karmaConfig": "karma.conf.js",
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "src/styles.css"
            ],
            "scripts": []
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "tsconfig.app.json",
              "tsconfig.spec.json",
              "e2e/tsconfig.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        },
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "graficasApp:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "graficasApp:serve:production"
            }
          }
        }
      }
    }
  },
  "defaultProject": "graficasApp"
}

报错信息

  • Windows CMD编译报错
    Windows CMD编译报错
  • 浏览器端编译报错
    浏览器端编译报错

请问这类图表库集成报错的最优解决方式是什么?


解决方案

本次报错的核心原因是依赖版本不匹配:ng2-charts 2.4.2仅适配chart.js 2.9.x版本,你安装的chart.js 3.2.1属于大版本迭代,API存在大量破坏性变更,直接导致类型定义找不到、配置项不兼容等问题。
按以下步骤操作即可修复:

  1. 卸载当前不兼容的chart.js版本
npm uninstall chart.js
  1. 安装适配ng2-charts 2.4.2的chart.js版本
npm install chart.js@2.9.4
  1. 补充datalabels插件依赖(你代码中用到了pluginDataLabels但未引入对应依赖,不需要该功能可跳过)
npm install chartjs-plugin-datalabels@1.0.0

安装完成后在barras.component.ts头部添加引入语句:

import * as pluginDataLabels from 'chartjs-plugin-datalabels';
  1. 清理缓存并重启服务
    删除项目根目录下的node_modules文件夹和package-lock.json文件,重新执行npm install安装依赖,之后重启ng serve即可正常编译。

额外提示:你在angular.json中添加的chart.js CommonJS依赖豁免配置是正确的,无需修改。后续集成第三方库时优先核对官方文档的依赖版本要求,严格匹配大版本号可避免绝大多数集成类报错。


内容的提问来源于stack exchange,提问作者user13987123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 18:36:03