Динамическое количество диаграмм в charts.js + angular2 / javascript - PullRequest
0 голосов
/ 02 октября 2018

Я получаю объект json, содержащий список диаграмм для отображения в моем шаблоне.Каждая диаграмма имеет [данные] и [параметры] и [тип].Я не могу заставить работать идентификатор, даже если зациклить его с помощью ngFor.

bar.component.ts

@Component({
  selector: 'ngx-chartjs-bar',
  template: `
    <div *ngFor="let chart of bardata>
    <chart type="bar" [data]="data" [options]="options"></chart>
    </div>
  `,
})
export class ChartjsBarComponent implements OnDestroy {
  data: any;
  bardata: any;
  options: any;
  themeSubscription: any;
  newLabel : any[];
  newData : number[];
  temp : any;


  constructor(
    private theme: NbThemeService,
    protected apiService: ApiService,

  ) {

    this.bardata = this.apiService.response_object.body;
    this.newData = [];
    this.newLabel = [];
    this.temp = [];

    for(var obj in this.bardata.byFile) {
       for(var curr in this.bardata.byFile[obj]) {
          this.temp.push(this.bardata.byFile[obj][curr]);
       }
    }

    console.log(this.bardata);
    this.themeSubscription = this.theme.getJsTheme().subscribe(config => {

      const colors: any = config.variables;
      const chartjs: any = config.variables.chartjs;
      this.data = {
        labels: ['Purchase Count', 'Refund Count', 'Payment Count'],
        datasets:  this.temp,

        /* [{
          data: this.newData,
          label: this.newLabel[0],
          backgroundColor: NbColorHelper.hexToRgbA(colors.primaryLight, 0.8),
        }, {
          data: [28, 48, 40, 19, 86, 27, 90],
          label: this.newLabel[1],
          backgroundColor: NbColorHelper.hexToRgbA(colors.infoLight, 0.8),
        }], */
      };

      this.options = {
        maintainAspectRatio: false,
        responsive: true,
        legend: {
          labels: {
            fontColor: chartjs.textColor,
          },
        },
        scales: {
          xAxes: [
            {
              gridLines: {
                display: false,
                color: chartjs.axisLineColor,
              },
              ticks: {
                fontColor: chartjs.textColor,
              },
            },
          ],
          yAxes: [
            {
              gridLines: {
                display: true,
                color: chartjs.axisLineColor,
              },
              ticks: {
                fontColor: chartjs.textColor,
              },
            },
          ],
        },
      };
    });
  }

  ngOnInit() {
  }

  ngOnDestroy(): void {
    this.themeSubscription.unsubscribe();
  }
}

В этом случае temp содержит список баров или графиков.и newData - это данные из API, содержащие наборы данных для баров / графиков.

html компонента:

<nb-card>
<nb-card-header>View All Statistics</nb-card-header>
<nb-card-body>
    <div class="row">
        <div class="col-lg-6">
            <nb-card>
                <nb-card-header>Bar</nb-card-header>
                <nb-card-body>
             issue here -->   <div *ngFor="let data of barData; index as i" [attr.data- 
                index]="i"> 
                <ngx-chartjs-bar></ngx-chartjs-bar>
                </div>     
                </nb-card-body>
            </nb-card>
        </div>
    </div>
</nb-card-body>

Выше не являетсярабочий пример, просто представление о том, что должно произойти, но не совсем уверен, как установить индекс и перебрать каждый набор данных.Должен ли ngFor входить в html или декоратор в компоненте?

РЕДАКТИРОВАТЬ: json - это просто массив диаграмм, каждый индекс ссылается на диаграмму с соответствующим набором данных.так что если barData [0] сама по себе является диаграммой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...