【问题标题】:chart.js - Supplied parameters do not match any signature of call target (angular2)chart.js - 提供的参数与调用目标的任何签名都不匹配(angular2)
【发布时间】:2016-12-07 11:38:14
【问题描述】:

我在我的angular 2 应用程序中使用chart.js version 2.2.1

调用Chart的构造函数时会报错:
Supplied parameters do not match any signature of call target。 而npm start 命令不会编译应用程序。

var myChart = new Chart(ctx, {
    type: this.chartType,
    data: chartData,
    options: chartOptions
});

通过上述方法,在浏览器中绘制图表。
(但我必须:1)注释创建图表的代码,2)运行npm start, 3)取消注释代码)

我已经重装TypeScript Definitions (d.ts) for chartjs

chart.d.ts 中是Chart 的签名:

interface Chart {
    Line(data: LinearChartData, options?: LineChartOptions): LinearInstance;
    Bar(data: LinearChartData, options?: BarChartOptions): LinearInstance;
    Radar(data: LinearChartData, options?: RadarChartOptions): LinearInstance;

    PolarArea(data: CircularChartData[], options?: PolarAreaChartOptions): CircularInstance;
    Pie(data: CircularChartData[], options?: PieChartOptions): CircularInstance;
    Doughnut(data: CircularChartData[], options?: PieChartOptions): CircularInstance;
}

declare var Chart: {
    new (context: CanvasRenderingContext2D): Chart;
    defaults: {
        global: ChartSettings;
    }
};

根据那个打字稿定义,我必须以这种方式创建图表:

var myChart = new Chart(ctx).Line(chartData, chartOptions);

通过这种方式调用Chart实例不包含Line(/*...*/)函数。

我该如何解决这个问题?

我已经按照这里的建议为 chart.js 安装了类型: https://www.nuget.org/packages/chartjs.TypeScript.DefinitelyTyped/

【问题讨论】:

    标签: angular chart.js typescript-typings


    【解决方案1】:

    解决问题中列出的问题:


    问:
    调用 Chart 的构造函数时会报错:

    • Supplied parameters do not match any signature of call target.

    • 并且npm start 命令无法编译应用程序。


    对于设置(angular2-rc4,chart.js-2.2.1),
    在实例化Chart 的组件中声明全局变量 图:declare var Chart: any;

    整个代码如下:

    import { Component, Input, Output, 
             EventEmitter, ElementRef, 
             Inject, AfterViewInit} from '@angular/core';
    
    
    declare var Chart: any; //THIS LINE resolves the problem listed in question!!! 
    
    
    @Component({
        selector: 'my-chart',  
        template: `<canvas height="{{chartHeight}}"></canvas>`,
        styles: [`:host { display: block; }`]
    })
    
    export class LinearChartDirective implements AfterViewInit {
        @Input() chartData: Array<any>;
        @Input() chartXAxisLabels: Array<any>;
    
        @Input() showLegend: boolean;
        @Input() legendLabel: string;
        @Input() chartHeight: number;
    
        chart: any;
    
        constructor( @Inject(ElementRef) private element: ElementRef) {    }
    
        ngAfterViewInit() {        
            let context = this.element.nativeElement.children[0].getContext('2d');
            this.createChart(ctx);
        }
    
        createChart(ctx: CanvasRenderingContext2D) {    
            if(!this.chartData)
                return;
    
            let data = {
                labels: this.chartXAxisLabels,
                datasets: [{
                    label: this.legendLabel,
                    data: this.chartData,
    
                    backgroundColor: ['rgba(54, 162, 235, 0.2)'],
                    borderColor: ['rgba(54, 162, 235, 1)'],
                    borderWidth: 1,
                    lineTension: 0, // set to 0 means - No bezier
    
                    pointBorderColor: "rgba(75,192,192,1)",
                    pointBackgroundColor: "#fff",
                    pointBorderWidth: 1,
                    pointHoverRadius: 5,
                    pointHoverBackgroundColor: "rgba(75,192,192,1)",
                    pointHoverBorderColor: "rgba(220,220,220,1)",
                    pointHoverBorderWidth: 2,
                    pointRadius: 2,
                    pointHitRadius: 10
                }]
            };
    
            let chartOptions = {           
                legend: { display: this.showLegend !== undefined ? this.showLegend : false },
    
                responsive: true,
                maintainAspectRatio: true,
                scales: { yAxes: [{ ticks: { beginAtZero: true } }] }
            };
    
            //next line is no more complaining about "Supplied parameters..."
            this.chart = new Chart(ctx, { type: 'line', data: data, options: chartOptions });
        }  
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-24
      • 2017-05-08
      • 2017-11-14
      • 2018-01-08
      • 2016-11-27
      • 2016-06-09
      • 2017-11-18
      • 2023-03-15
      • 2017-04-28
      相关资源
      最近更新 更多