Я новичок в angular, у меня в компоненте есть этот код:
import { Component, inject, Input } from '@angular/core';
import { CommonModule } from '@angular/common';
import Chart from 'chart.js/auto';
@Component({
selector: 'app-chart',
standalone: true,
imports: [CommonModule],
templateUrl: './chart.component.html',
styleUrl: './chart.component.css'
})
export class ChartComponent {
title = 'ng-chart';
chart: any = [];
constructor() {}
ngOnInit() {
this.chart = new Chart('canvas', {
type: 'scatter',
data: {
labels: ["2010-01-02 05:06:07","2010-01-03 05:06:07","2010-01-04 05:06:07","2010-01-05 05:06:07"],
datasets: [{
label: 'Transactions',
data: [{
x: "2010-01-01 05:06:07",
y: 10
}, {
x: "2010-01-02 05:06:07",
y: 5
}, {
x: "2010-01-03 05:06:07",
y: 5.5
}],
backgroundColor: 'rgb(255, 99, 132)'
},{
data: [{
x: "2010-01-04 05:06:07",
y: 7
}, {
x: "2010-01-05 05:06:07",
y: 7
}, {
x: "2010-01-06 05:06:07",
y: 6.5
}],
backgroundColor: 'rgb(125, 99, 132)'
}],
},
options: {
scales: {
y: {
beginAtZero: true
},
x:{
type: 'time'
}
}
},
});
}
}
но он ничего не показывает: если я поставлю type: 'linear' на тип x, он покажет мне график с 0 в качестве начальной точки в x и 1 в качестве последнего элемента.
Как я могу иметь даты по осям X?
Я пробовал использовать документацию, но не нашел примера, соответствующего моим требованиям.





Возможно, вам придется импортировать chartjs-adapter-moment, чтобы он начал работать, сначала я установил с помощью
npm install moment chartjs-adapter-moment --save
Затем я добавил импорт, как показано ниже!
import 'chartjs-adapter-moment';
Затем, наконец, я переключился на дочернее представление для ссылки на холст, и это сработало отлично!
полный код
import { Component, ElementRef, ViewChild } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
import Chart from 'chart.js/auto';
import 'zone.js';
import 'chartjs-adapter-moment';
@Component({
selector: 'app-root',
standalone: true,
imports: [CommonModule],
template: `
<canvas #canvas></canvas>
`,
})
export class App {
@ViewChild('canvas') canvas!: ElementRef<any>;
title = 'ng-chart';
chart: any = [];
constructor() {}
ngAfterViewInit() {
this.chart = new Chart(this.canvas.nativeElement, {
type: 'scatter',
data: {
labels: [
'2010-01-02 05:06:07',
'2010-01-03 05:06:07',
'2010-01-04 05:06:07',
'2010-01-05 05:06:07',
],
datasets: [
{
label: 'Transactions',
data: [
{
x: '2010-01-01 05:06:07',
y: 10,
},
{
x: '2010-01-02 05:06:07',
y: 5,
},
{
x: '2010-01-03 05:06:07',
y: 5.5,
},
],
backgroundColor: 'rgb(255, 99, 132)',
},
{
data: [
{
x: '2010-01-04 05:06:07',
y: 7,
},
{
x: '2010-01-05 05:06:07',
y: 7,
},
{
x: '2010-01-06 05:06:07',
y: 6.5,
},
],
backgroundColor: 'rgb(125, 99, 132)',
},
],
},
options: {
scales: {
y: {
beginAtZero: true,
},
x: {
type: 'time',
},
},
},
});
}
}
bootstrapApplication(App);
На данный момент я не могу это одобрить, но введенные вами даты — это всего лишь строки. Возможно, чтоchart.js не сможет интерпретировать строки как даты. Попробуйте использовать тип даты или метки времени. Если даты отображаются неправильно, вы сможете каким-то образом преобразовать данные. Я с телефона, поэтому не могу проверить, как это сделать правильно.