Обновить данные диаграммы в angular2-chartjs

Я использую angular2-chartjs для создания диаграммы. Ниже мой код

Модуль

import { ChartModule } from 'angular2-chartjs';

Вид

 <div class="col-md-4">
     Login Frequency Filter
     <button (click)="handleClick($event)" type="button">Update Data</button>
 </div>
 <div class="col-md-8">

        <nb-card>
          <nb-card-header>Login Frequency</nb-card-header>
          <nb-card-body>
            <chart #loginChart id="chart" type="line" [data]="data" [options]="pieoptions"></chart>
          </nb-card-body>
        </nb-card>    
 </div>

и это мой компонент

 data: any;

  handleClick(event: Event) {
   this.data['datasets'][0] = [99,88,88,77];    
       }
ngAfterViewInit() {
    this.themeSubscription = this.theme.getJsTheme().subscribe(config => {

      const colors: any = config.variables;
      const echarts: any = config.variables.echarts;

      const chartjs: any = config.variables.chartjs;

      this.data = {
        labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
        datasets: [ {
          data: [18, 48, 77, 9, 100, 27, 40],
          label: 'Events',
          backgroundColor: NbColorHelper.hexToRgbA(colors.info, 0.3),
          borderColor: colors.info,
        },
        ],
      };    

    });
  }

Я думал, что если я обновлю данные в событии нажатия кнопки, тогда он должен автоматически обновлять данные на диаграмме, и я вижу, что данные обновляются, но диаграмма не перерисовывается.

 handleClick(updated) {
    if(updated)
    {
    // compute new data and store in this.datasets
    this.data.datasets[0].data = [99,99,99,99,99,99,99];
    // just trying refresh full variable
    this.data = this.data.slice();
    }
   }

Спасибо


person SP1    schedule 04.08.2018    source источник
comment
Это невероятно старая и устаревшая библиотека. Попробуйте ngx-charts или просто chart.js   -  person Z. Bagley    schedule 04.08.2018
comment
Спасибо. Я новичок в Angular и начал с этого github.com/akveo/ngx-admin/tree/master/src/app/pages/charts/ и здесь я получил диаграмму, с которой пытался обновить   -  person SP1    schedule 04.08.2018
comment
Проверьте это: stackoverflow.com/questions/46328575/ (это правильный способ импорта простого chart.js и обновления). Кроме того, попробуйте this.data = JSON.parse(JSON.stringify(this.data)); для вашей текущей версии (вместо slice()), и она должна обновиться.   -  person Z. Bagley    schedule 04.08.2018
comment
Спасибо за ответ. Я вижу, что данные обновляются, но диаграмма вообще не перерисовывается. Просто линейная диаграмма остается точно такой же, но данные становятся другими. Как я могу заставить диаграмму перерисовываться.   -  person SP1    schedule 04.08.2018
comment
Если вы используете библиотеку, которую я разместил там, вы вызываете myChart.update(); (или делаете ее переменной области видимости компонента myChart: any; и this.myChart.update();), поэтому всегда рекомендуется избегать устаревших библиотек из-за их поломки и/или отсутствия исправлений! Удачи в обучении :)   -  person Z. Bagley    schedule 04.08.2018


Ответы (2)


Вы должны обновить вручную следующим образом:

объявите переменную _chart следующим образом:

@ViewChild(BaseChartDirective) private _chart;

вы можете обновить, используя следующую функцию,

 forceChartRefresh() {
    setTimeout(() => {
      this._chart.refresh();
    }, 10);
  }

и звоните после обновления ваших данных,

 this.forceChartRefresh();
person Sajeetharan    schedule 04.08.2018

Панель @ViewChild("loginChart"): ChartComponent;

некоторый_метод(){

/* ваши изменения... tus cambios

в конце поместите следующее al final poner lo siguiente */ this.bar.ngOnInit(); // должно работать deberia funcionar

}

person Gabriel Benavides    schedule 16.11.2018
comment
Ваш код не имеет отношения к вопросу. Кроме того, вопрос на английском языке, пожалуйста, ответьте на английском языке. - person Yserbius; 16.11.2018