1👍
You can do this onClick
onClick: (point, elements) => {
if (elements && elements.length) {
var segment = elements[0];
segment._model.backgroundColor = "#f6954d"
$scope.colors[segment._index] = "#f6954d";
$scope.$apply();
}
}
- Chartjs-HTML Canvas Fill Area Under Line
- Chartjs-Chartjs 2 Line Graph Single Stroke Between Datasets
0👍
For the people working with legacy code like myself…
I have an answer to this.
With angular-chart.js, use the chart-dataset-override
property. With this, you can set the borderColor
to accept an array, representing each data index.
<canvas id="myBarChart"
class="chart chart-bar"
chart-colors="colors"
chart-data="data"
chart-labels="labels"
chart-series="series"
chart-options="options"
chart-click="onClick"
chart-dataset-override="datasetOverride" // <--- what you want
</canvas>
This is how I defined mine:
$scope.datasetOverride = [
{
borderWidth: [0, 0, 0, 0, 0, 0, 0], // defaults to no border
borderColor: "rgb(225, 225, 225)", // white
}
// can add more objects here for other datasets
];
Grab a reference to your chart from an ‘on-create’ event like so:
$scope.$on('chart-create', function (evt, chart) {
$scope.chart = chart;
});
Then use a conditional in your click event function to set the increase the border, using the event index.
If so, I changed all 4 of these properties.
element[0]._model.borderWidth = 10;
element[0]._chart.config.data.datasets.borderWidth[barIndex] = 10;
element[0]._view.borderWidth = 10;
$scope.datasetOverride[0].borderWidth[element[0]._index] = 10; // something like this
Then reference that chart and call the update
trigger at the end of your click function.
$scope.chart.update();
Magic. Grabbing on to the update method will create a smoother change in your graph than $scope.$apply()
Hope this helps someone!
Cheers.