代码之家  ›  专栏  ›  技术社区  ›  DR93

如何注销图表插件?

  •  2
  • DR93  · 技术社区  · 6 年前

    使用Chart.pluginService.register,我在图表上画了一条线,表示B页上的一些需求(假设)。我从A页转到B页。

    当我回到A页时如何注销插件?

    我在这个源代码上看到了一个注销和清除函数: https://github.com/chartjs/Chart.js/blob/647dc582cd85fc8e25d49cf0e38d459c582b2652/src/core/core.plugin.js

    注销函数无效。清除功能清除先前绘制的线,但图表的图例消失。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Andrei Tătar    6 年前

    添加

    ngOnDestroy() {
      Chart.pluginService.unregister(this.horizonalLinePlugin);
    }
    

    在你的 ProductDetailComponent

    https://stackblitz.com/edit/angular-uxfwqb?file=src/app/product-detail/product-detail.component.ts

    这里的问题是,如果同时有多个图表组件可见,那么插件将在所有其他图表中可见。

    1. 只注册一次插件,在ngInit之外。。。直接在模块文件中或全局某个位置。这将影响整个应用程序中的所有图表,但不必注销它,因此很明显,影响所有图表的是全局性的。

    2. 在chart.js(或angular2 chartjs的pull请求)上创建自己的包装器组件/指令,该组件/指令可以接受 plugins Chart 建造师 http://www.chartjs.org/docs/latest/developers/plugins.html : var chart1 = new Chart(ctx, { plugins: [plugin] }); 这将允许你有一个带插件的图表和一个不带插件的图表,所以不需要注册/注销全局插件。