Я использую Highcharts с AngularJS. У меня есть директива, которая генерирует диаграмму. В функции связи я указываю объект по умолчанию chartOptions
. После установки параметров по умолчанию я добавляю этот объект к другому объекту, переданному директиве, которая сохраняется между маршрутами и обновлениями, passedObject
. Таким образом, любые изменения до chartOptions
после добавления успешно сохраняются. Затем диаграмма генерируется при вызове Highcharts.chart();Данные серии Highcharts не сохраняются при изменении углового маршрута
return {
restrict: 'E',
scope: {
passedObject: "="
},
link: function (scope, element) {
var chartOptions = {
title : {
text: 'sample report'
}
...
}
scope.passedObject.chartOptions = scope.passedObject.chartOptions || chartOptions;
var chart = Highcharts.chart(element[0], scope.passedObject.chartOptions);
}
// successfully add new series
// series rendered immediately but does not persist though view changes and page reload.
scope.addSeries = function(seriesObject){
scope.elementObject.chart.addSeries(seriesObject);
};
// successfully pushes object to array
// does not immediately render because Highchart doesn't see change
// but does render after reloading because Highchart checks options again
// Does not render with animation like addSeries() API does.
scope.addSeriesNoAPI = function(seriesObject){
scope.elementObject.chart.series.push(seriesObject);
};
}
Там не проблема создания штурманской в первый раз, и если я вернусь к этой точке зрения, диаграмма снова создает с теми же параметрами по умолчанию.
Однако, если я использую API Highcharts для программного добавления новой серии данных chart.addSeries(newSeriesObject)
, серия добавляется и отображается на диаграмме, но не сохраняется между маршрутами и обновлениями.
Если я вручную добавить объект серии к моей chartOptions
через прямой JS scope.passedObject.chartOptions.series.push(newSeriesObject)
объект успешно толкнул в массив и будет сохраняться, но карта не будет автоматически обновляться, потому что он не знает series
массива изменился, что почему API существует.
При ближайшем рассмотрении выясняется, что функция Highchart нажимает новый объект на некоторый массив, отличный от того, который я сохраняю, но я не могу понять, как заставить это работать.
Я предположил, что эта строка кода: var chart = Highcharts.chart(element[0], scope.passedObject.chartOptions);
бы связать таблицу с scope.passedObject.chartOptions
объекта, таким образом, что когда что-то вроде функции добавил новую серию, он будет добавлен в scope.passedObject.chartOptions
. После регистрации и просмотра объектов, однако, это не так.
Когда вы имеете в виду упорство, вы говорите, когда переключаетесь между видами? Или вы имеете в виду, когда вы перезагружаете страницу? Хранение данных на rootScope или в рамках общей службы может помочь вам сохранить данные между представлениями, но не поможет, если пользователь обновит страницу. – user2263572
Я имею в виду сохранение любого вида, будь то переключение просмотров или обновление страницы. Но проблема вообще не сохраняется, «passObject», который я передаю в директиву, хранится в хранилище сеансов и сохраняется между переключением просмотров и обновлениями, без проблем. Кроме того, изменения, внесенные непосредственно в этот объект, сохраняются без проблем. Проблема, о которой я думаю, заключается в том, как «addSeries()» HighChart нажимает новый объект, потому что он не толкает этот объект на мой объект опций и, следовательно, не сохраняется в любом случае. –