Как я могу сделать свой ngx-line-chart отзывчивым?
Я использую ngx-admin и пытаюсь сделать мой ngx-line-chart отзывчивым.
Моя диаграмма находится в nb-карте, и когда я изменяю размер окна, nb-карта полностью отзывчива. Поэтому я хочу, чтобы мой график был изменен, чтобы он поместился внутри 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, что если размер не определен, диаграмма подходит для его контейнера, но в моем случае это не работает.
Спасибо за помощь!
4 ответа
После некоторых исследований я нашел решение своей проблемы.
1) Чтобы изменить размер диаграммы при изменении размера окна:
Чтобы изменить размер диаграммы, я использовал метод "onResize(event)". Этот метод принимает в параметре событие изменения размера окна. В этом методе я просто получаю ширину окна, делю ее на соотношение (в моем случае это 1,35) и назначаю ширину моего графика.
Метод onResize (событие):
// 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];
}
Этот ответ работает для меня. Я надеюсь, что это поможет вам.
Я придумал для этого лучшее и простое решение:
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>
Делает его отзывчивым в зависимости от ширины контейнера.
Ни один из двух приведенных выше ответов полностью не сработал для меня. Но, исходя из приведенной выше логики, у меня это сработало:
диаграмма-компонент.html
<div class="card">
<div #ContainerRef class="card-body">
<ngx-charts-pie-chart
(window:resize)="
resizeChart(ContainerRef.offsetWidth)
"
[view]="view"
[results]="dataDashboard"
[legend]="showLegend"
legendPosition=""
[labels]="showLabels"
[legendTitle]="''"
[scheme]="colorScheme"
>
</ngx-charts-pie-chart>
</div>
</div>
диаграмма-component.ts
/* ---- Auto resize chart ---- */
private resizeChart(width: any): void {
this.view = [width, 320]
}
Таким образом, масштабирование в соответствии с размером родительского div
Для высоты и ширины вы можете попробовать это
this.view = [innerHeight, innerWidth];