Ионные 4 и ngx-диаграммы - проблема с отзывчивостью в ионной сетке внутри ионного слайда
У меня проблемы с отзывчивостью ngx-Charts внутри "ion-slide", или, точнее, ngx-Chart внутри "ion-grid", который находится в "ion-slide".
Чтобы график был отзывчивым, я нашел два правила. Кто-то говорит, что вы не должны использовать параметр "view" внутри ngx-Chart. Второй говорит, что тег окружения / родителя должен иметь размер. Если оба значения верны, диаграмма должна адаптироваться к размеру родительского элемента.
Я даже заставил его работать (быть отзывчивым) внутри сетки - сетки на "обычной" странице, но я не могу заставить ее работать (быть отзывчивой) внутри сетки в слайде.
Пожалуйста, посмотрите мой пример проекта на GitHub https://github.com/Joey73/ionic-ngx-charts.git (страницы: Treemap и Treemap в слайде).
TreeMap-в-slide.page.html:
...
<ion-content>
<ion-slides pager="true" [options]="slideOpts">
<!-- The chart in this slide works / is responsive -->
<ion-slide class="chart-wrapper">
<ngx-charts-tree-map
[scheme]="colorScheme"
[results]="treemapData"
(select)="onSelect($event)">
</ngx-charts-tree-map>
</ion-slide>
<!-- The chart in this slide is not responsive - it's inside a grid -->
<ion-slide>
<ion-grid>
<ion-row>
<h1>TreeMap in ion-grid</h1>
</ion-row>
<ion-row>
<ion-col size="12">
<div class="chart-wrapper">
<ngx-charts-tree-map
[scheme]="colorScheme"
[results]="treemapData"
(select)="onSelect($event)">
</ngx-charts-tree-map>
</div>
</ion-col>
</ion-row>
</ion-grid>
</ion-slide>
</ion-slides>
</ion-content>
TreeMap-в-slide.page.scss
.chart-wrapper {
max-height: 35vh;
overflow: hidden;
}
Вне ионного скольжения диаграммы (даже если они находятся в ионной сетке) являются отзывчивыми.
Что я могу сделать, чтобы сделать диаграмму ngx отзывчивой, которая находится внутри ионной сетки, которая находится в ионном слайде?
1 ответ
Я нашел возможное решение сам.
HTML:
...
<ion-slide>
<ion-grid>
<ion-row>
<h1>TreeMap in ion-grid</h1>
</ion-row>
<ion-row>
<ion-col size="12">
<div>
<ngx-charts-tree-map
(window:resize)="onResize($event)"
[scheme]="colorScheme"
[results]="treemapData"
(select)="onSelect($event)"
[view]="view">
</ngx-charts-tree-map>
</div>
</ion-col>
</ion-row>
</ion-grid>
</ion-slide>
...
TS:
...
export class TreemapInSlidePage {
title = 'ngx Treemap in Slider with Ionic 4';
treemapData: any[];
slideOpts = {
initialSlide: 0,
speed: 400
};
view: any[] = [700, 400];
colorScheme = {
domain: ['#5AA454', '#A10A28', '#C7B42C', '#AAAAAA', '#4381D1', '#65ECE4']
};
constructor() {
if (innerWidth > 992) {
this.view = [innerWidth - 300, 400];
} else {
this.view = [innerWidth, 400];
}
Object.assign(this, { treemapData });
}
onResize(event) {
if (event.target.innerWidth > 992) {
this.view = [event.target.innerWidth - 300, 400];
} else {
this.view = [event.target.innerWidth, 400];
}
}
onSelect(event: Event) {
console.log(event);
}
}
global.scss:
...
.split-pane-visible >.split-pane-side {
min-width: 300px!important;
max-width: 300px!important;
}