Chart data can now be entirely replaced using `chart.data = {...}` thanks to the new property setter (instead of using `chart.config.data = {}`). Also update the documentation, as suggested by @ldaguise and @kennethkalmer, with a note about versions prior 2.6.
#### .update(duration, lazy)
-Triggers an update of the chart. This can be safely called after replacing the entire data object. This will update all scales, legends, and then re-render the chart.
+Triggers an update of the chart. This can be safely called after updating the data object. This will update all scales, legends, and then re-render the chart.
```javascript
// duration is the time for the animation of the redraw in milliseconds
myLineChart.update(); // Calling update now animates the position of March from 90 to 50.
```
+> **Note:** replacing the data reference (e.g. `myLineChart.data = {datasets: [...]}` only works starting **version 2.6**. Prior that, replacing the entire data object could be achieved with the following workaround: `myLineChart.config.data = {datasets: [...]}`.
+
#### .reset()
Reset the chart to it's state before the initial animation. A new animation can then be triggered using `update`.
// Add the chart instance to the global namespace
Chart.instances[me.id] = me;
+ // Define alias to the config data: `chart.data === chart.config.data`
Object.defineProperty(me, 'data', {
get: function() {
return me.config.data;
+ },
+ set: function(value) {
+ me.config.data = value;
}
});
expect(meta.data[i]._model.base).toBeCloseToPixel(484);
expect(meta.data[i]._model.width).toBeCloseToPixel(40);
expect(meta.data[i]._model).toEqual(jasmine.objectContaining({
- datasetLabel: chart.config.data.datasets[1].label,
- label: chart.config.data.labels[i],
+ datasetLabel: chart.data.datasets[1].label,
+ label: chart.data.labels[i],
backgroundColor: 'red',
borderSkipped: 'top',
borderColor: 'blue',
expect(chart.data.datasets[1].data).toBe(ds1.data);
});
+ it('should define chart.data as an alias for config.data', function() {
+ var config = {data: {labels: [], datasets: []}};
+ var chart = acquireChart(config);
+
+ expect(chart.data).toBe(config.data);
+
+ chart.data = {labels: [1, 2, 3], datasets: [{data: [4, 5, 6]}]};
+
+ expect(config.data).toBe(chart.data);
+ expect(config.data.labels).toEqual([1, 2, 3]);
+ expect(config.data.datasets[0].data).toEqual([4, 5, 6]);
+
+ config.data = {labels: [7, 8, 9], datasets: [{data: [10, 11, 12]}]};
+
+ expect(chart.data).toBe(config.data);
+ expect(chart.data.labels).toEqual([7, 8, 9]);
+ expect(chart.data.datasets[0].data).toEqual([10, 11, 12]);
+ });
+
it('should initialize config with default options', function() {
var callback = function() {};
expect(tooltip._view.dataPoints[0].index).toEqual(pointIndex);
expect(tooltip._view.dataPoints[0].datasetIndex).toEqual(datasetIndex);
expect(tooltip._view.dataPoints[0].xLabel).toEqual(
- chart.config.data.labels[pointIndex]
+ chart.data.labels[pointIndex]
);
expect(tooltip._view.dataPoints[0].yLabel).toEqual(
- chart.config.data.datasets[datasetIndex].data[pointIndex]
+ chart.data.datasets[datasetIndex].data[pointIndex]
);
expect(tooltip._view.dataPoints[0].x).toBeCloseToPixel(point._model.x);
expect(tooltip._view.dataPoints[0].y).toBeCloseToPixel(point._model.y);