1
votes

In my angular solution I need to display some charts using Highcharts. In my component.ts I have the following code:

import * as Highcharts from "highcharts";

highcharts = Highcharts;
  chartOptions = {
    chart: {
       type: "spline",
       title: "Reach/TRP"
    },
    xAxis: {
      title: {
        text: this.xAxis.name
      }
    },
    yAxis: {
       title: {
          text: "Reach"
       }
    },
    series: [
       {
          name: this.xAxis.name,
          data: this.xAxis.data
       }
    ]
 };

Then in my .html I use it like this:

<highcharts-chart
  [Highcharts] = "highcharts"
  [options] = "chartOptions"
  style="width: 100%; height: 400px; display: block;">
</highcharts-chart>

On my html I also have the following dropdown:

<p-dropdown [showTransitionOptions]="'0ms'" [hideTransitionOptions]="'0ms'"
  dropdownIcon="fa fa-angle-down" class= "nextgen-dropdown" 
  [options]="optionsLookup"
  [(ngModel)]="selectedOption" (onChange)= "onOptionChange($event)">
</p-dropdown>

Which have the "OnOptionChange" method that should update the Chart like this:

 onOptionChange() {
    this.xAxis.name = this.selectedOption;
    this.xAxis.data = [100, 100, 200, 200, 350, 250];
    this.chartOptions.series[0] = this.xAxis;
  }

The problem here is that the method is correctly invoked but the chart is not updated at all.

What I'm missing here?

1
What do you mean with detection strategy? - pedrodotnet

1 Answers

3
votes

You should pass new options reference:

onOptionChange() {
  this.xAxis.name = this.selectedOption;
  this.xAxis.data = [100, 100, 200, 200, 350, 250];
  this.chartOptions.series[0] = this.xAxis;

  this.chartOptions = { ...this.chartOptions }; // this should do the trick
}