import { Component, OnInit, AfterViewInit, OnDestroy, OnChanges, SimpleChanges, Input, ViewChild, ElementRef } from '@angular/core'; import * as echarts from 'echarts'; @Component({ selector: 'app-chart-component', standalone: true, templateUrl: './chart-component.component.html', styleUrls: ['./chart-component.component.css'] }) export class ChartComponentComponent implements OnInit, OnDestroy, OnChanges { @ViewChild('chart', { static: true }) chartContainer!: ElementRef; private chartInstance: echarts.ECharts | null = null; // 接收外部传入的配置项(例如:柱状图、折线图等配置) @Input() options: echarts.EChartsOption = {}; /** 默认样式 */ defaultTooltipOptions = { title: { textStyle: { color: "#ffffff" }, }, backgroundColor: "#100c2A", legend: { textStyle: { color: '#ffffff' }, }, tooltip: { trigger: 'item', borderColor: '#00eff8', backgroundColor: '#12192C', padding: [6, 14, 6, 14], textStyle: { fontSize: 14, color: '#74FAFB', }, position: 'top', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '3%', bottom: '3%', containLabel: true }, toolbox: { show: false, feature: { dataView: { show: true, readOnly: false }, magicType: { show: true, type: ['line', 'bar'] }, restore: { show: true }, saveAsImage: { show: true } } }, calculable: true, xAxis: [ { type: 'category', // prettier-ignore data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] } ], yAxis: [ { type: 'value' } ], } constructor() { } ngOnInit(): void { console.log('ChartComponentComponent ngOnInit'); this.initEcharts(); } ngOnChanges(changes: SimpleChanges): void { if (changes['options'] && !changes['options'].isFirstChange()) { console.log('ChartComponentComponent ngOnChanges'); this.updateChartOptions(); } } ngOnDestroy(): void { if (this.chartInstance) { console.log('ChartComponentComponent ngOnInit'); this.chartInstance.dispose(); } } initEcharts(): void { const chartDom = this.chartContainer.nativeElement; this.chartInstance = echarts.init(chartDom); // 设置默认的tooltip配置,如果外部传入了tooltip则会覆盖这里的设置 // 合并默认和外部传入的配置项 const mergedOptions = { ...this.defaultTooltipOptions, ...this.options }; this.chartInstance.setOption(mergedOptions); } updateChartOptions(): void { if (this.chartInstance) { this.chartInstance.setOption(this.options); } } }