如何在显示新图表后"破坏"前一个图表(画布)Angular 4

Gus*_*avo 2 javascript charts typescript angular

我有一个代码,在选择下拉列表后更新Graphic的数据.但是,当我选择一个选项时,它看起来像新的Graphic和旧的Graphic同时停留在同一个画布上.

这是我的代码:

funcao(){

  this.graphicService.getDatas().subscribe(datas => {
        this.datas = datas; //Gets the data from the API and put on local datas variable

        if(this.data[0].dimension == "Tech")
        {
          this.counter=0;
        }
        else if(this.data[0].dimension == "Bus"){
          this.counter=1;
        }
              this.barChartData = { //Bar graphic data
                  labels: ["Entry", "Foundation"],
                  datasets: [{
                      label: this.datas[this.counter].subdimensions[0].name,
                      backgroundColor: 'rgba(37, 230, 131,0.7)'
                      data: [
                          this.datas[this.counter].subdimensions[0].entry,
                          this.datas[this.counter].subdimensions[0].foundation
                      ]
                  }]

              };

              this.canvas = document.getElementById('myChart');
              this.ctx = this.canvas.getContext('2d');

              let myChart = new Chart(this.ctx, { // Bar graphic configs
                     type: 'bar',
                     data: this.barChartData,
                     options: {
                         scales: {
                            yAxes: [{
                                ticks: {
                                    beginAtZero: true
                                }
                            }]
                          }
                     }
                 });
      });
}
Run Code Online (Sandbox Code Playgroud)

HTML

<select [(ngModel)]="data[0].dimension" (change)="funcao()" class="form-control">
  <option *ngFor="let data of datas" [value]="data.dimension">{{ data.dimension }}</option>
</select>

  <canvas id="myChart"></canvas>
Run Code Online (Sandbox Code Playgroud)

我想要做的是旧图形消失,只有新图形停留在屏幕上.

ɢʀᴜ*_*ᴜɴᴛ 10

好像你正在使用ChartJS库.在这种情况下,您可以使用该destroy()方法销毁任何以前的图表实例.

ꜰɪʀꜱᴛ

在图表组件类中添加一个属性(图表实例将存储在其中):

public myChart: Chart
Run Code Online (Sandbox Code Playgroud)

ꜱᴇᴄᴏɴᴅ

在创建新图表实例之前检查并销毁图表实例(如果有):

...
if (this.myChart) this.myChart.destroy(); //destroy prev chart instance
this.myChart = new Chart(this.ctx, {
         type: 'bar',
         data: this.barChartData,
         ...
Run Code Online (Sandbox Code Playgroud)