diff --git a/angular-chart.js b/angular-chart.js index 9a3f267a..b3a9a07a 100644 --- a/angular-chart.js +++ b/angular-chart.js @@ -109,7 +109,8 @@ chartColors: '=?', chartClick: '=?', chartHover: '=?', - chartDatasetOverride: '=?' + chartDatasetOverride: '=?', + chartForceUpdate: '=?' }, link: function (scope, elem/*, attrs */) { if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]); @@ -118,7 +119,7 @@ scope.$watch('chartData', watchData, true); scope.$watch('chartSeries', watchOther, true); scope.$watch('chartLabels', watchOther, true); - scope.$watch('chartOptions', watchOther, true); + scope.$watch('chartOptions', watchOptions, true); scope.$watch('chartColors', watchOther, true); scope.$watch('chartDatasetOverride', watchOther, true); scope.$watch('chartType', watchType, false); @@ -139,7 +140,7 @@ var chartType = type || scope.chartType; if (! chartType) return; - if (scope.chart && canUpdateChart(newVal, oldVal)) + if (scope.chart && (canUpdateChart(newVal, oldVal) || scope.chartForceUpdate)) return updateChart(newVal, scope); createChart(chartType, scope, elem); @@ -156,6 +157,12 @@ createChart(chartType, scope, elem); } + function watchOptions (newVal, oldVal) { + if (isEmpty(newVal)) return; + if (angular.equals(newVal, oldVal)) return; + updateChartOption(newVal, scope) + } + function watchType (newVal, oldVal) { if (isEmpty(newVal)) return; if (angular.equals(newVal, oldVal)) return; @@ -352,6 +359,18 @@ cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop; } + function updateChartOption(values,scope) { + if (values) { + Object.keys(values).forEach((key) => { + if (scope.chart.options[key]) { + scope.chart.options[key] = values[key] + } + }) + scope.chart.update('quiet'); + scope.$emit('chart-update', scope.chart); + } + } + function updateChart (values, scope) { if (Array.isArray(scope.chartData[0])) { scope.chart.data.datasets.forEach(function (dataset, i) {