首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Angular 4中更新/重新渲染Charts.js

在Angular 4中更新/重新渲染Charts.js
EN

Stack Overflow用户
提问于 2018-02-23 19:56:28
回答 2查看 1.3K关注 0票数 0

每当我在API中有一些更改时,尝试重新呈现图表,方法如下:

代码语言:javascript
复制
ngOnChanges(changes: SimpleChanges) {
    const data = changes['data'].currentValue;
    this.draw(data);
}

和绘制函数

代码语言:javascript
复制
private draw(charts) {
 this.charts = charts.map((chart, i) => {
    this.options.title.text = chart.title;
    const options = {
        type: 'bar',
        data: chart,
        options: this.options
    };
    return new Chart(`chart${i}`, options);
 });
 this.charts.forEach(chart => {
    chart.update();
 });
}

您可以看到,我尝试在绘图函数中更新/重新呈现图表。在控制台日志中,我可以看到图表对象已使用新数据更新,但它们只是从页面中消失。我的update方法出了什么问题?

EN

回答 2

Stack Overflow用户

发布于 2018-02-23 22:17:42

我找到了一个解决方案,我知道这是一个技巧,但目前还可以))所以,基本上我检查图表是否已经存在于DOM中,如果存在,则删除它们并创建新的画布元素。

代码语言:javascript
复制
private removeAction() {
  const block = document.querySelector('#chartsBlock');

   //remove
  while (block.firstChild) {
    block.removeChild(block.firstChild);
  }

   // create
  this.charts.forEach((chart, i) => {
    let canvas = document.createElement('canvas');
    canvas.id = `chart${i}`;
    block.appendChild(canvas);
  });
 }
票数 0
EN

Stack Overflow用户

发布于 2018-02-23 22:25:05

您可以尝试使用ChangeDetectorRef

代码语言:javascript
复制
import { ChangeDetectorRef } from '@angular/core';

constructor(private detector: ChangeDetectorRef) {}

ngOnChanges(changes: SimpleChanges) {
    const data = changes['data'].currentValue;
    this.draw(data);
    this.detector.detectChanges()
    // if detectChanges() doesn't work, try markForCheck()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48947332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档