首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular11中未显示ChartsJS图例

Angular11中未显示ChartsJS图例
EN

Stack Overflow用户
提问于 2021-06-12 21:46:11
回答 1查看 47关注 0票数 0

我已经阅读了我能找到的关于这个主题的所有文档和堆栈溢出问题,但我仍然看到一个奇怪的问题。问题是ChartsJS的图例(常规的javascript库,而不是特定于Angular的库)没有显示在我的angular组件中,即使图表显示正确。

我有一个折线图,我通过HTTP实时填充数据-当数据传入时,我将其添加并显示到图表中。我看到的问题是传说从来没有出现过。

以下是您感兴趣的文件:

角度组件:

代码语言:javascript
复制
export class ChartingComponent implements OnInit {
  @ViewChild('myCanvasId', {static: true}) private chartRef: any;

  chart: any;

  ephemeralData: EphemeralData = {
    id: null ,
    dateTime: "",
    heartRate: null,
    spO2: 100,
    respiratory: null,
    pulseRate: null,
    nIBPDia: null,
    nIBPMean: null,
    nIBPSys: null,
    temperature: null,
    endOfTidalCO2: null,
    airwayRespirationRate: null,
    endTidalCO2: null,
    inspiredCO2: null,
    inspiredO2: null,
    inspiredN2O: null,
    endTidalN2O: null,
    inspiredAneshetic: null,
    endTidalAneshetic: null,
    endTidalIsoflurane: null,
    inspiredIsoflurane: null,
    endTidalSevoflurane: null,
    inspiredSevoflurane: null,
    endTidalDesflurane: null,
    inspiredDesflurane: null,
    minimumAlveolarConcentration: null,
    meanAirwayPressure: null,
    positiveEndExpiratoryPressure: null,
    plateauPressure: null,
    maximumAirwayPressure: null,
    minuteVolume: null,
    expiredTidalVolume: null,
    inspiratoryTidalVolume: null,
    inspiratoryTimeExpiratoryTimeRatio: null,
    breateRate: null,
    fractionalConcentrationO2Inspired: null
  };

  constructor(private data: DataService) { }

  ngOnInit(): void {
    this.initChart(this.ephemeralData);
    interval(3000).subscribe(x => {
      this.getLatestEphemeralData();
    })
  }

  private getLatestEphemeralData()
  {
    this.data.ephemeralData().subscribe(
      (res: any) => 
      {
        this.ephemeralData.dateTime = res['dateTime'];
        this.ephemeralData.spO2 = res['spO2'];
        this.ephemeralData.respiratory = res['respiratory'];
        this.ephemeralData.nIBPDia = res['nIBPDia'];
        this.ephemeralData.nIBPMean = res['nIBPMean'];
        this.ephemeralData.nIBPSys = res['nIBPSys'];
        this.ephemeralData.temperature = res['temperature'];
        if (this.chart)
        {
          this.addChartData(this.chart, null, this.ephemeralData);
        }
      }
    )
  }

  private addChartData(chart: Chart, label: any, data: EphemeralData)
  {
      //chart.data.labels?.push(label);
      chart.data.datasets[chart.data.datasets.map(function(e) { return e.label; }).indexOf("spO2")].data.push((data.spO2));
      chart.data.datasets[chart.data.datasets.map(function(e) { return e.label; }).indexOf("respiratory")].data.push((data.respiratory));
      chart.data.datasets[chart.data.datasets.map(function(e) { return e.label; }).indexOf("nIBPDia")].data.push((data.nIBPDia));
      chart.data.datasets[chart.data.datasets.map(function(e) { return e.label; }).indexOf("nIBPMean")].data.push((data.nIBPMean));
      chart.data.datasets[chart.data.datasets.map(function(e) { return e.label; }).indexOf("temperature")].data.push((data.temperature));
    chart.update();
  }

  private initChart(chartData: EphemeralData)
  {
    //if (this.chart) 
      //this.chart = new Chart(null as any, null as any); //find a better way of doing this
    Chart.register(LineController, LineElement, PointElement, LinearScale, CategoryScale);
    this.chart = new Chart(this.chartRef.nativeElement, {
      type: 'line',
      data: {
        labels: ['spO2', 'Respiratory', 'nIBPDia', 'nIBPMean', 'nIBPSys', 'temperature'],
        datasets: [          
          {
            label: 'spO2',
            backgroundColor: 'rgb(255, 99, 132)',
            data: [0],
            borderColor: "#3cba9f",
            fill: true
          },
          {
            label: 'respiratory',
            backgroundColor: 'rgb(255, 99, 132)',
            data: [0],
            borderColor: "#ffcc00",
            fill: true
          },
          {
            label: 'nIBPDia',
            backgroundColor: 'rgb(255, 99, 132)',
            data: [0],
            borderColor: "#ffcc00",
            fill: true
          },
          {
            label: 'nIBPMean',
            backgroundColor: 'rgb(255, 99, 132)',
            data: [0],
            borderColor: "#ffcc00",
            fill: true
          },
          {
            label: 'nIBPSys',
            backgroundColor: 'rgb(255, 99, 132)',
            data: [0],
            borderColor: "#ffcc00",
            fill: true
          },
          {
            label: 'temperature',
            backgroundColor: 'rgb(255, 99, 132)',
            data: [0],
            borderColor: "#ffcc00",
            fill: true
          }
        ]
      },
       options: {
         scales: {
           x: {
             display: false,
             suggestedMin: 0,
             suggestedMax: 240,
           },
           y: {
             display: true,
             suggestedMin: 0,
             suggestedMax: 200
           },
         },
         plugins: {
            legend: {
                display: true,
                position: 'right',
                labels: {
              }
            }
          }
        }
    });
  }
}

组件的HTML内容:

代码语言:javascript
复制
<canvas #myCanvasId>{{ chart }}</canvas>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-12 22:16:12

我认为您在initChart方法中错过了Legend的注册。您是否可以尝试导入它并将其添加为或参考示例stackblitz

代码语言:javascript
复制
Chart.register(LineController, LineElement, PointElement, LinearScale, CategoryScale, Legend);

还要检查文档以验证是否缺少更多的导入,或者在integration部分中检查替代方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67949447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档