Как я могу сделать мой ngx-line-chart отзывчивым?

Я использую ngx-admin и пытаюсь настроить ngx-line-chart на отзывчивость.

Моя диаграмма находится в nb-карточке, и когда я изменяю размер окна, nb-card полностью реагирует. Поэтому я хочу, чтобы размер моей диаграммы был изменен, чтобы он уместился внутри nb-карты.

Мой html-код:

<div style="margin: 100px auto auto">
    <nb-card>
        <nb-card-header>XXXXXXXXXX</nb-card-header>
            <nb-card-body>
                <ngx-line-chart></ngx-line-chart>
            </nb-card-body>
    </nb-card>
</div>

мой компонент:

import { Component } from '@angular/core';

@Component({
    selector: 'ngx-line-chart',
    template: `
    <ngx-charts-line-chart
      [scheme]="colorScheme"
      [results]="multi"
      [xAxis]="showXAxis"
      [yAxis]="showYAxis"
      [showXAxisLabel]="showXAxisLabel"
      [showYAxisLabel]="showYAxisLabel"
      [xAxisLabel]="xAxisLabel"
      [yAxisLabel]="yAxisLabel">
    </ngx-charts-line-chart>
  `,
})
export class LineChartComponent {
    showXAxis = true;
    showYAxis = true;
    showXAxisLabel = true;
    xAxisLabel = 'Date';
    showYAxisLabel = true;
    yAxisLabel = 'Services effectués';
    colorScheme = {
        domain: ['blue'],
    };
    themeSubscription: any;
    multi = [
        {
            name: 'Services effectués',
            series: [
                {
                    name: '01/01/2019',
                    value: 156,
                },
                {
                    name: '02/01/2019',
                    value: 134,
                },
                {
                    name: '03/01/2019',
                    value: 140,
                },
                {
                    name: '04/01/2019',
                    value: 167,
                },
                {
                    name: '05/01/2019',
                    value: 158,
                },
                {
                    name: '06/01/2019',
                    value: 178,
                },
                {
                    name: '07/01/2019',
                    value: 310,
                },
            ],
        },
    ];

    constructor() {
    }
}

Я уже пытаюсь настроить размер экрана, чтобы размер моей диаграммы соответствовал размеру экрана, но он не был полностью отзывчивым. Чтобы изменить размер диаграммы, я могу использовать переменную view = [x, y]. Я читал в документации ngx-line-chart, что, если размер не определен, диаграмма подходит для его контейнера, но в моем случае это не работает.

Спасибо за помощь !


person Loufi    schedule 28.09.2018    source источник


Ответы (2)


После некоторых исследований я нашел решение своей проблемы.

1) Чтобы изменить размер диаграммы при изменении размера окна:

Чтобы изменить размер диаграммы, я использовал метод onResize (event). Этот метод принимает в качестве параметра событие изменения размера окна. В этом методе я просто получаю ширину окна, делю ее на коэффициент (в моем случае это 1,35) и назначаю его ширине моего графика.

onResize (event) метод:

// view is the variable used to change the chart size (Ex: view = [width, height])

onResize(event) {
    this.view = [event.target.innerWidth / 1.35, 400];
}

Мой шаблон html:

<ngx-charts-line-chart
  (window:resize)="onResize($event)"
  [scheme]="colorScheme"
  [results]="multi"
  [xAxis]="showXAxis"
  [yAxis]="showYAxis"
  [showXAxisLabel]="showXAxisLabel"
  [showYAxisLabel]="showYAxisLabel"
  [xAxisLabel]="xAxisLabel"
  [yAxisLabel]="yAxisLabel"
  [view]="view">
</ngx-charts-line-chart>

2) Чтобы изменить размер диаграммы на другом устройстве:

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

Мой конструктор:

constructor() {
    this.view = [innerWidth / 1.3, 400];
}

Этот ответ работает для меня. Надеюсь, это вам поможет.

person Loufi    schedule 02.10.2018
comment
как исправить вертикальное переполнение столбца диаграммы ngx его родительский div ... - person Sras; 10.08.2020
comment
как исправить вертикальное переполнение столбца диаграммы ngx его родительский div - person Sras; 31.03.2021

Я придумал для этого лучшее и простое решение:

componentenet.html

<div #containerRef class="card-body">
  <ngx-charts-line-chart
    [view]="[containerRef.offsetWidth, 400]"
    [scheme]="colorScheme"
    [legend]="legend"
    [showXAxisLabel]="showXAxisLabel"
    [showYAxisLabel]="showYAxisLabel"
    [xAxis]="xAxis"
    [yAxis]="yAxis"
    [timeline]="timeline"
    [results]="_lineChartData"
  >
  </ngx-charts-line-chart>
</div>

Делает его отзывчивым в зависимости от ширины контейнера.

ОБНОВИТЬ

если вы хотите, чтобы он реагировал как контейнер для высоты и ширины:

<div #containerRef class="card-body">
 <ngx-charts-line-chart
   [view]="[containerRef.offsetWidth, containerRef.offsetHeight]"
   [scheme]="colorScheme"
   [legend]="legend"
   [showXAxisLabel]="showXAxisLabel"
   [showYAxisLabel]="showYAxisLabel"
   [xAxis]="xAxis"
   [yAxis]="yAxis"
   [timeline]="timeline"
   [results]="_lineChartData"
 >
 </ngx-charts-line-chart>
</div>
person Parth Developer    schedule 07.08.2020
comment
К сожалению, для высоты это не работает. У вас есть решение для этого? - person laprof; 14.10.2020
comment
Используйте [view]="[containerRef.offsetWidth, containerRef.offsetHeight]", это будет работать с высотой и шириной - person Parth Developer; 31.01.2021
comment
@ParthDeveloper, не могли бы вы добавить его в качестве ответа, поскольку он отлично работает - person deepak thomas; 04.03.2021
comment
@deepakthomas обновил код. - person Parth Developer; 05.03.2021
comment
Для меня была рекурсия. Когда мы обновляем размер дочернего элемента, в зависимости от компонента, родительский элемент перенастраивается. - person Rafael Pizao; 27.03.2021
comment
@RafaelPizao Не могли бы вы поделиться живой ссылкой на код или ссылкой на stackblitz, чтобы мы могли взглянуть на нее и помочь вам с этим. - person Parth Developer; 31.03.2021