Как я могу обновлять свои диаграммы в режиме реального времени (это работает только при увеличении и уменьшении масштаба)

#angular #typescript #rxjs #chart.js #observable

#angular #typescript #rxjs #chart.js #наблюдаемый

Вопрос:

Я хочу иметь график с изменением каждый раз, но он работает, когда я увеличиваю и уменьшаю масштаб страницы, но не тогда, когда я ничего не делаю. Моя цель — иметь график, который меняется каждые 5 секунд или в режиме реального времени, но я не знаю, как мне следует поступать, но я думаю, что это не очень сложно, но я не нахожу решения.

Каждые 5 секунд мои данные обновляются [0,0,0,0,0,0,0,0,0,0] => [0,0,0,0,0,0,0,0,0,4.5643] => [0,0,0,0,0,0,0,0,4.5643,5.2161] , например: и т.д.

У кого-нибудь есть небольшая идея? Заранее благодарю вас!

Вот мой HTML-код :

 <div class="doubleTrp">
    <canvas baseChart
            [chartType]="chartType"
            [datasets]="[
                {
                    data: graphikAir, label: 'Consommation Air'
                }
             ]"
            [labels]="['-10', '-9', '-8', '-7', '-6', '-5', '-4', '-3', '-2', '-1']"
            [colors]="[{
              backgroundColor: ['rgb(130, 230, 0)'],
              hoverBackgroundColor: ['rgb(185, 30, 30)'],
              borderWidth: 1
            }]"
            [options]="{
              responsive: true
            }"
    </canvas>
</div>
 

И вот мой код TS :

 import {Component, OnInit, OnDestroy} from '@angular/core';
import {ChartData, ChartType} from 'chart.js';
import { LineService } from '../services/line.service';
import {ActivatedRoute} from '@angular/router';
import {combineLatest, Subscription} from 'rxjs';
import {filter, map} from 'rxjs/operators';

@Component({
  selector: 'app-conso-graph',
  templateUrl: './conso-graph.component.html',
  styleUrls: ['./conso-graph.component.scss']
})
export class ConsoGraphComponent implements OnDestroy{

  lineSubscription: Subscription;
  lineSubscription2: Subscription;
  graphikAir: number[];
  graphikElec: number[];
  chartType: ChartType;
  chartData: any;

  constructor(private lineService: LineService,
              private route: ActivatedRoute) {
    this.chartIt();
  }

  _focusedData$ = combineLatest(
    this.lineService.lineSubject.pipe(filter(x => x.length > 0)),
    this.route.params.pipe(filter(x => !!x.id), map(x => x.id -1))
  ).pipe(
    map(([csvs, id]) => csvs[id])
  );

  gestionData(): void {
    this.lineSubscription = this._focusedData$.subscribe(x => this.graphikAir = x.graphAir);
    this.lineSubscription2 = this._focusedData$.subscribe(x => this.graphikElec = x.graphElec);
  }

  async chartIt() {
    await this.gestionData();

    this.chartType = 'line';

    this.chartData = [
      {
        data: this.graphikAir, label: 'Consommation Air'
      }
    ];
  }

  chartClicked(e: any): void { }
  chartHovered(e: any): void { }

  ngOnDestroy(): void {
    this.lineSubscription.unsubscribe();
    this.lineSubscription2.unsubscribe();
  }

}
 

Ответ №1:

Я нахожу решение, помещая GraphikAir в шаблоны HTML, и это работает!