Я создаю приложение Ionic с AngularJS. В этом приложении мне нужна линейная диаграмма данных. Вчера я задал вопрос об этом (Angular-Chart not rendering anything), на который был дан ответ, но теперь есть новая проблема.Странная проблема с угловым ChartJS, неправильно отображаемая в приложении Ionic
Иногда диаграмма мгновенно видна, но когда я поворачиваю экран между пейзажем/портретом, он становится все больше поворота. Несколько раз график не отображается вообще (кроме легенды), пока вы не будете поочередно поворачивать экран.
Когда я проверяю его с помощью веб-инспектора на своем iPhone, я вижу, что атрибуты HTML для высоты становятся все больше и больше. То же самое для стиля CSS-height.
HTML, в веб-инспектор изначально выглядит следующим образом: (это когда график находится на вкладке неактивной)
<div ng-show="graph.visible && finishedLoading" class="ng-hide" style="">
<div class="chart-container"><canvas class="chart chart-line" data="graph.data" labels="graph.labels" options="graph.options" series="graph.series" colours="graph.colours" getcolour="graph.getColour" click="graph.click" hover="graph.hover" legend="graph.legend" width="576" height="424" style="width: 288px; height: 212px;">
</canvas><chart-legend><ul class="line-legend"><li><span style="background-color:rgba(70,191,189,1)"></span>Waarde</li><li><span style="background-color:rgba(247,70,74,1)"></span>Bovengrens</li><li><span style="background-color:rgba(253,180,92,1)"></span>Ondergrens</li></ul></chart-legend></div>
</div>
После того, что вкладка активна его HTML выглядит следующим образом:
<div ng-show="graph.visible && finishedLoading" class="" style="">
<div class="chart-container"><canvas class="chart chart-line" data="graph.data" labels="graph.labels" options="graph.options" series="graph.series" colours="graph.colours" getcolour="graph.getColour" click="graph.click" hover="graph.hover" legend="graph.legend" width="576" height="424" style="width: 288px; height: 212px;">
</canvas><chart-legend><ul class="line-legend"><li><span style="background-color:rgba(70,191,189,1)"></span>Waarde</li><li><span style="background-color:rgba(247,70,74,1)"></span>Bovengrens</li><li><span style="background-color:rgba(253,180,92,1)"></span>Ondergrens</li></ul></chart-legend></div>
</div>
На этот раз график мгновенно виден, что не всегда так. Я думаю, что это связано с веб-инспектором. Когда я не открываю веб-инспектор, изначально видится только легенда.
После поворота на альбомную и обратно к портрету четыре раза, HTML выглядит следующим образом:
<div ng-show="graph.visible && finishedLoading" class="" style="">
<div class="chart-container"><canvas class="chart chart-line" data="graph.data" labels="graph.labels" options="graph.options" series="graph.series" colours="graph.colours" getcolour="graph.getColour" click="graph.click" hover="graph.hover" legend="graph.legend" width="576" height="816" style="width: 288px; height: 408px;">
</canvas><chart-legend><ul class="line-legend"><li><span style="background-color:rgba(70,191,189,1)"></span>Waarde</li><li><span style="background-color:rgba(247,70,74,1)"></span>Bovengrens</li><li><span style="background-color:rgba(253,180,92,1)"></span>Ondergrens</li></ul></chart-legend></div>
</div>
Как вы можете видеть, высота становится больше каждый поворот.
HTML,-файл выглядит следующим образом:
<div ng-show="graph.visible && finishedLoading">
<canvas
class="chart chart-line"
data="graph.data"
labels="graph.labels"
options="graph.options"
series="graph.series"
colours="graph.colours"
getColour="graph.getColour"
click="graph.click"
hover="graph.hover"
legend="graph.legend">
</canvas>
</div>
$scope.graph
выглядит следующим образом:
$scope.graph = {
data: [
[], // value
[], // upper value
[] // lower value
],
labels: [],
options: {
animation: false,
pointDotRadius : 2,
datasetFill : false,
responsive: true,
maintainAspectRatio: false,
scaleGridLineColor : 'rgba(0, 0, 0, .1)',
showTooltips: false
},
series: ['Waarde', 'Bovengrens', 'Ondergrens'],
colours: ['#46BFBD', '#F7464A', '#FDB45C'],
// getColour:
// click:
// hover:
legend: true,
visible: false
}
и те ценности, приготовьтесь здесь:
function loadGraphData() {
$scope.graph.data = [
[], // value
[], // upper value
[] // lower value
];
$scope.graph.labels = [];
for (var key in $scope.results) {
var result = $scope.results[key];
$scope.graph.data[0].push(result.value);
$scope.graph.data[1].push(result.high);
$scope.graph.data[2].push(result.low);
$scope.graph.labels.push($filter('date')(result.date, 'dd MMM HH:mm'));
}
};
который вызывается один раз запрос завершил загрузку, поэтому перед тем, как вкладка с графиком будет видна.
CSS-я подал заявку на холсте:
canvas {
width: 100%!important;
height: 100%!important;
}
Я надеюсь, что проблема ясна, и что кто-то может помочь мне. Я пробовал все, что мог придумать. Если вам нужна дополнительная информация, дайте мне знать!
EDIT // Что-то примечание: когда я помещаю график на первую вкладку (которая изначально активна), график мгновенно виден, но имеет ту же странную проблему при увеличении размера окна браузера.
Вы добавили метатег viewport для предотвращения масштабирования? Если нет, попробуйте добавить это в html (head): '' –
Yup, это уже есть. :-(Кроме того, когда 'maintainAspectRatio' НЕ на' false', граф имеет высоту 0, которая также не изменяется при изменении размера. – JeroenJK