简体   繁体   English

NG2-Charts 无法绑定到“数据集”,因为它不是“画布”的已知属性

[英]NG2-Charts Can't bind to 'datasets' since it isn't a known property of 'canvas'

I am trying to use the basic example of NG2-Charts ( http://valor-software.com/ng2-charts/ )我正在尝试使用 NG2-Charts 的基本示例( http://valor-software.com/ng2-charts/

I copy pasted the HTML part我复制粘贴了 HTML 部分

  <div style="display: block">
    <canvas baseChart
        [datasets]="barChartData"
        [labels]="barChartLabels"
        [options]="barChartOptions"
        [legend]="barChartLegend"
        [chartType]="barChartType"
        (chartHover)="chartHovered($event)"
        (chartClick)="chartClicked($event)"></canvas>
  </div>

and the TypeScript part和打字稿部分

  private barChartOptions: any = {
    scaleShowVerticalLines: false,
    responsive: true
  };
  private barChartLabels: string[] = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
  private barChartType: string = 'bar';
  private barChartLegend: boolean = true;

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

  // events
  private chartClicked(e: any): void {
      console.log(e);
  }

  private chartHovered(e: any): void {
      console.log(e);
  }

I run npm install ng2-charts --save , npm install chart.js --save and typings install dt~chart.js --save --global我运行npm install ng2-charts --savenpm install chart.js --savenpm install chart.js --save typings install dt~chart.js --save --global

I also imported chart.js in my vendor.ts file我还在我的 vendor.ts 文件中导入了 chart.js

import 'chart.js';

My dependencies:我的依赖:

{
    "@angular/common": "^2.0.0",
    "@angular/compiler": "2.0.0",
    "@angular/core": "2.0.0",
    "@angular/forms": "2.0.0",
    "@angular/http": "2.0.0",
    "@angular/platform-browser": "2.0.0",
    "@angular/platform-browser-dynamic": "2.0.0",
    "@angular/router": "3.0.0",
    "angular2-jwt": "^0.1.18",
    "chart.js": "^2.3.0",
    "core-js": "^2.4.0",
    "json-loader": "^0.5.4",
    "moment": "^2.14.1",
    "ng2-charts": "^1.4.0",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.11",
    "zone.js": "^0.6.23"
  }

Here is the Error这是错误

Unhandled Promise rejection: Template parse errors:
Can't bind to 'datasets' since it isn't a known property of 'canvas'. ("iuminfooneoptionsTwo">
            <div style="display: block">
                <canvas baseChart [ERROR ->][datasets]="barChartData" [labels]="barChartLabels" [options]="barChartOptions" [legend]="barChartLeg"): PlayerprofileComponent@39:34
Can't bind to 'labels' since it isn't a known property of 'canvas'. ("          <div style="display: block">
                <canvas baseChart [datasets]="barChartData" [ERROR ->][labels]="barChartLabels" [options]="barChartOptions" [legend]="barChartLegend" [chartType]="barChart"): PlayerprofileComponent@39:60
Can't bind to 'options' since it isn't a known property of 'canvas'. ("lay: block">
                <canvas baseChart [datasets]="barChartData" [labels]="barChartLabels" [ERROR ->][options]="barChartOptions" [legend]="barChartLegend" [chartType]="barChartType" (chartHover)="chartH"): PlayerprofileComponent@39:86
Can't bind to 'legend' since it isn't a known property of 'canvas'. ("  <canvas baseChart [datasets]="barChartData" [labels]="barChartLabels" [options]="barChartOptions" [ERROR ->][legend]="barChartLegend" [chartType]="barChartType" (chartHover)="chartHovered($event)" (chartClick)"): PlayerprofileComponent@39:114
Can't bind to 'chartType' since it isn't a known property of 'canvas'. ("ets]="barChartData" [labels]="barChartLabels" [options]="barChartOptions" [legend]="barChartLegend" [ERROR ->][chartType]="barChartType" (chartHover)="chartHovered($event)" (chartClick)="chartClicked($event)">
"): PlayerprofileComponent@39:140 ; Zone: <root> ; Task: Promise.then ; Value: Error: Template parse errors:(…) Error: Template parse errors:
Can't bind to 'datasets' since it isn't a known property of 'canvas'. ("iuminfooneoptionsTwo">
            <div style="display: block">
                <canvas baseChart [ERROR ->][datasets]="barChartData" [labels]="barChartLabels" [options]="barChartOptions" [legend]="barChartLeg"): PlayerprofileComponent@39:34
Can't bind to 'labels' since it isn't a known property of 'canvas'. ("          <div style="display: block">
                <canvas baseChart [datasets]="barChartData" [ERROR ->][labels]="barChartLabels" [options]="barChartOptions" [legend]="barChartLegend" [chartType]="barChart"): PlayerprofileComponent@39:60
Can't bind to 'options' since it isn't a known property of 'canvas'. ("lay: block">
                <canvas baseChart [datasets]="barChartData" [labels]="barChartLabels" [ERROR ->][options]="barChartOptions" [legend]="barChartLegend" [chartType]="barChartType" (chartHover)="chartH"): PlayerprofileComponent@39:86
Can't bind to 'legend' since it isn't a known property of 'canvas'. ("  <canvas baseChart [datasets]="barChartData" [labels]="barChartLabels" [options]="barChartOptions" [ERROR ->][legend]="barChartLegend" [chartType]="barChartType" (chartHover)="chartHovered($event)" (chartClick)"): PlayerprofileComponent@39:114
Can't bind to 'chartType' since it isn't a known property of 'canvas'. ("ets]="barChartData" [labels]="barChartLabels" [options]="barChartOptions" [legend]="barChartLegend" [ERROR ->][chartType]="barChartType" (chartHover)="chartHovered($event)" (chartClick)="chartClicked($event)">
"): PlayerprofileComponent@39:140
    at TemplateParser.parse (eval at <anonymous> (http://localhost:8080/vendor.js:623:1), <anonymous>:133:19)
    at RuntimeCompiler._compileTemplate (eval at <anonymous> (http://localhost:8080/vendor.js:2103:1), <anonymous>:244:51)
    at eval (eval at <anonymous> (http://localhost:8080/vendor.js:2103:1), <anonymous>:167:83)
    at Set.forEach (native)
    at compile (eval at <anonymous> (http://localhost:8080/vendor.js:2103:1), <anonymous>:167:47)
    at ZoneDelegate.invoke (eval at <anonymous> (http://localhost:8080/polyfills.js:4105:1), <anonymous>:192:28)
    at Zone.run (eval at <anonymous> (http://localhost:8080/polyfills.js:4105:1), <anonymous>:85:43)
    at eval (eval at <anonymous> (http://localhost:8080/polyfills.js:4105:1), <anonymous>:451:57)
    at ZoneDelegate.invokeTask (eval at <anonymous> (http://localhost:8080/polyfills.js:4105:1), <anonymous>:225:37)
    at Zone.runTask (eval at <anonymous> (http://localhost:8080/polyfills.js:4105:1), <anonymous>:125:47)
    at drainMicroTaskQueue (eval at <anonymous> (http://localhost:8080/polyfills.js:4105:1), <anonymous>:357:35)

The NG2-Charts website says I need to include this in the HTML NG2-Charts 网站说我需要将其包含在 HTML 中

<script src="node_modules/chart.js/src/chart.js"></script>

But I think thats not correct because how would that statement work in a productive minified / built app?但我认为那是不正确的,因为该声明如何在高效的缩小/构建的应用程序中工作? I also thought my webpack import statement would already take care of that?我还认为我的 webpack 导入语句已经解决了这个问题? I googled around but sadly only found stuff for some Angular 2 Beta version on NG2 Charts.我四处搜索,但遗憾的是只在 NG2 Charts 上找到了一些 Angular 2 Beta 版本的内容。

Does anyone has an idea on how to fix that?有没有人知道如何解决这个问题?

Thanks and Cheers, Raphael Hippe感谢和干杯,拉斐尔·希佩

Try importing ChartsModule in your app.module.ts like this-尝试像这样在 app.module.ts 中导入 ChartsModule -

import { ChartsModule } from 'ng2-charts/ng2-charts';

imports: [
   .....
   ChartsModule
   .....
]

I had the very same problem.我有同样的问题。 I found on github that you just have to insert the ChartsModule in the submodule as well.我在 github 上发现你只需要在子模块中插入 ChartsModule 。 First you add in app.module.ts and the, in my case, reports.module.ts .首先你添加app.module.ts和,在我的例子中, reports.module.ts

I'm working with ng2-charts + Angular 7 + Ionic 4, and I spent several hours searching for a solution.我正在使用 ng2-charts + Angular 7 + Ionic 4,我花了几个小时寻找解决方案。 And this finally worked to me (after following the initial steps, of course, like installing ng2-charts and charts.js).这最终对我有用(当然,在遵循初始步骤之后,例如安装 ng2-charts 和 charts.js)。 Just import ChartsModule on the following files:只需在以下文件中导入 ChartsModule:

app.module.ts app.module.ts

import { ChartsModule } from 'ng2-charts';
...
imports: [ChartsModule]

yourPage.module.ts yourPage.module.ts

import { ChartsModule } from 'ng2-charts';
@NgModule({
  imports: [
    IonicModule,
    CommonModule,
    FormsModule,
    RouterModule.forChild([{ path: '', component: YourPagePage }]),
    **ChartsModule**
  ]
})

I was trying to import it also in yourPage.page.ts, but the solution was to import it in yourPage.module.ts!我也试图在 yourPage.page.ts 中导入它,但解决方案是在 yourPage.module.ts 中导入它!

Try it out.试试看。

i'm working with ng2-chart@3.0.0-rc.2我正在使用ng2-chart@3.0.0-rc.2

looks like the property chartType is now called type看起来属性chartType现在被称为type

so it should look something like this:所以它应该是这样的:

    <canvas 
      style="display: block;background-color: #3a3939;" 
      width="600" 
      height="300" 
      id="canvas" 
      #myCanvas
      
      baseChart 
      [type]="lineChartType" 
      [datasets]="lineChartData" 
      [labels]="lineChartLabels" 
      [options]="mfChartOptions"
      [legend]="lineChartLegend">
    </canvas>

Instead of importing the ChartsModule in App Module, import it in inside module where your are using.不要在 App Module 中导入 ChartsModule,而是将其导入到您正在使用的内部模块中。 For example, home module (if using Charts in Home page).例如,主页模块(如果在主页中使用图表)。

In case you are using a Shared Module, you also need to export the ChartsModule from there, to make it available to all your components which use your Shared Module.如果您正在使用共享模块,您还需要从那里导出 ChartsModule,以使其可用于使用您的共享模块的所有组件。

// Simplified module only showing what's important for ChartsModule
import { NgModule } from '@angular/core';
import { ChartsModule } from 'ng2-charts';

@NgModule({
    declarations: [],
    imports: [ChartsModule],
    exports: [ChartsModule]
})

export class SharedModule {
    static forRoot(): ModuleWithProviders<SharedModule> {
        return {
            ngModule: SharedModule
        };
    }
}

If your component is declared in another module other than app.module.ts you will simply do the following:如果您的组件是在app.module.ts以外的另一个模块中声明的,您只需执行以下操作:

app.module.ts

import { ChartsModule } from 'ng2-charts';

...

@NgModule({
   ...

   imports: [
      ...
      ChartsModule,
      ...
   ]
})
export class AppModule{ }

module-where-your-component-is-declared.module.ts

import { ChartsModule } from 'ng2-charts';

...

@NgModule({
   declarations: [YourComponent],
   imports: [
      ...
      ChartsModule,
      ...
   ],
   ...
})
export class ModuleWhereYourComponentIsDeclared { }

In my case, it was nothing to do with including ChartsModule in multiple modules or exporting it.就我而言,这与在多个模块中包含ChartsModule或导出它无关。

I had created a chart component that used ng-chart and then found I needed another version of it.我创建了一个使用ng-chart的图表组件,然后发现我需要它的另一个版本。 So I copied the component, renamed the class and template file, but forgot to update the templateUrl property in the @Component decorator.所以我复制了组件,重命名了类和模板文件,但是忘记更新@Component装饰器中的templateUrl属性。

Having two different components referencing the same template file gave the exact same error:有两个不同的组件引用同一个模板文件给出了完全相同的错误:

Can't bind to 'datasets' since it isn't a known property of 'canvas'无法绑定到“数据集”,因为它不是“画布”的已知属性

As soon as I changed the new component to use the correct HTML template, the error was resolved.一旦我将新组件更改为使用正确的 HTML 模板,错误就解决了。

FYI, I reference ChartsModule as shown in @sanket's answer in the module of my chart components仅供参考,我引用了ChartsModule ,如我的图表组件模块中@sanket 的回答所示and the module of the page components that reference them以及引用它们的页面组件的模块(so it's not needed in AppModule ). (因此在AppModule不需要它)。

The reason might be: You are using Ng2Charts directly from your child components/module.原因可能是:您直接从子组件/模块使用 Ng2Charts。

Solutions: You have to import the Ng2Charts on your parent module as well.解决方案:您还必须在父模块上导入 Ng2Charts。 (Import Ng2Charts [ng2-charts], to your parent and child module) (导入 Ng2Charts [ng2-charts],到你的父子模块)

Happy fixing everyone.祝大家修好。

Thank you.谢谢你。 Marjun Villegas马琼·维勒加斯

In my case I had to change how I import and a little change in my html file tag:在我的情况下,我不得不改变我的导入方式和我的 html 文件标签的一些变化:

chart.component.ts图表组件.ts

import {Component} from '@angular/core';
import {CHART_DIRECTIVES} from 'ng2-charts/ng2-charts';

@Component({
    selector: 'chart-balance',
    template: require('./templates/chart-balance.template'),
    styles: [`.chart {display: block; width: 100%;}`],
    directives: [CHART_DIRECTIVES]
})

export class ChartBalanceComponent {
    public barChartOptions:any = {
        scaleShowVerticalLines: false,
        responsive: true,
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero: true,
                    callback: label => `${label.toLocaleString()}`
                }
            }]
        }
    };
    public barChartLabels:string[] = ['2014', '2015', '2016'];
    public barChartType:string = 'bar';
    public barChartLegend:boolean = true;

    public barChartData:any[] = [
        {data: [32131, 3432, 543], label:'Test 1'},
        {data: [54353, 432, 768], label:'Test 2'}
    ];

    // events
    public chartClicked(e:any):void {
        console.log(e);
    }

    public chartHovered(e:any):void {
        console.log(e);
    }

}

Here was another change I did:这是我所做的另一个更改:

notice -- > base-chart class="chart" ...注意 --> 基础图表类 =“图表” ...

chart-balance.template图表平衡模板

<base-chart class="chart"
        [datasets]="barChartData"
        [labels]="barChartLabels"
        [options]="barChartOptions"
        [legend]="barChartLegend"
        [chartType]="barChartType"
        (chartHover)="chartHovered($event)"
        (chartClick)="chartClicked($event)"></base-chart>

ng2-charts ng2-图表

export * from './components/charts/charts';
declare var _default: {
    directives: any[][];
};
export default _default;

charts图表

import { OnDestroy, OnInit, OnChanges, EventEmitter, ElementRef } from '@angular/core';
export declare class BaseChartComponent implements OnDestroy, OnChanges, OnInit {
    static defaultColors: Array<number[]>;
    data: number[] | Array<number[]>;
    datasets: any[];
    labels: Array<any>;
    options: any;
    chartType: string;
    colors: Array<any>;
    legend: boolean;
    chartClick: EventEmitter<any>;
    chartHover: EventEmitter<any>;
    private ctx;
    private cvs;
    private parent;
    private chart;
    private initFlag;
    private element;
    constructor(element: ElementRef);
    ngOnInit(): any;
    ngOnChanges(): any;
    ngOnDestroy(): any;
    getChartBuilder(ctx: any): any;
    private refresh();
}
export interface Color {
    backgroundColor?: string | string[];
    borderWidth?: number | number[];
    borderColor?: string | string[];
    borderCapStyle?: string;
    borderDash?: number[];
    borderDashOffset?: number;
    borderJoinStyle?: string;
    pointBorderColor?: string | string[];
    pointBackgroundColor?: string | string[];
    pointBorderWidth?: number | number[];
    pointRadius?: number | number[];
    pointHoverRadius?: number | number[];
    pointHitRadius?: number | number[];
    pointHoverBackgroundColor?: string | string[];
    pointHoverBorderColor?: string | string[];
    pointHoverBorderWidth?: number | number[];
    pointStyle?: string | string[];
    hoverBackgroundColor?: string | string[];
    hoverBorderColor?: string | string[];
    hoverBorderWidth?: number;
}
export interface Colors extends Color {
    data?: number[];
    label?: string;
}
export declare const CHART_DIRECTIVES: Array<any>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 NG2-Charts模板解析错误:无法绑定到“数据集”,因为它不是“ canvas”的已知属性 - NG2-Charts Template parse errors: Can't bind to 'datasets' since it isn't a known property of 'canvas' 无法绑定到“数据集”,因为它不是“画布”的已知属性 - Can't bind to 'datasets' since it isn't a known property of 'canvas' 具有Angular 4的ng2-chart:无法绑定到“数据”,因为它不是“ canvas”的已知属性 - ng2-chart with Angular 4: Can't bind to 'data' since it isn't a known property of 'canvas' 无法绑定到“ chartType”,因为它不是“ canvas”的已知属性 - Can't bind to 'chartType' since it isn't a known property of 'canvas' 更新后NG2-Charts错误无法将数据集绑定到Angular2中的基本图表 - NG2-Charts Error Can't Bind Datasets To Base-Charts In Angular2 After Update NG0303:无法绑定到“ngif”,因为它不是“div”的已知属性 - NG0303: Can't bind to 'ngif' since it isn't a known property of 'div' 无法绑定到&#39;ngSwitchDefault&#39;,因为它不是&#39;ng-template&#39;的已知属性 - Can't bind to 'ngSwitchDefault' since it isn't a known property of 'ng-template' NG0303:无法绑定到“ngbTooltip”,因为它不是“button”的已知属性 - NG0303: Can't bind to 'ngbTooltip' since it isn't a known property of 'button' 无法绑定到“控件”,因为它不是(myComponent)的已知属性 - Can't bind to 'control' since it isn't a known property of (myComponent) 无法绑定到“ useStickyClasses”,因为它不是“ div”的已知属性 - Can't bind to 'useStickyClasses' since it isn't a known property of 'div'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM