Plugins can interact with the chart during the event handling process. The event handling flow is documented in the flowchart below. Each of the green processes is a plugin notification. If a plugin makes changes that require a re-render, the plugin can set `args.changed` to `true` to indicate that a render is needed. The built-in tooltip plugin uses this method to indicate when the tooltip has changed.

+
+### Chart destroy
+
+Plugins are notified during the destroy process. These hooks can be used to destroy things that the plugin made and used during its life.
+The `destroy` hook has been deprecated since Chart.js version 3.7.0, use the `afterDestroy` hook instead.
+
+
}
destroy() {
+ this.notifyPlugins('beforeDestroy');
const {canvas, ctx} = this;
this._stop();
this.ctx = null;
}
+ // TODO V4: delete destroy hook and reference to it in plugin flowchart
this.notifyPlugins('destroy');
delete instances[this.id];
+
+ this.notifyPlugins('afterDestroy');
}
toBase64Image(...args) {
const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
const result = this._notify(descriptors, chart, hook, args);
- if (hook === 'destroy') {
+ if (hook === 'afterDestroy') {
this._notify(descriptors, chart, 'stop');
this._notify(this._init, chart, 'uninstall');
}
* @param {object} options - The plugin options.
*/
resize?(chart: Chart, args: { size: { width: number, height: number } }, options: O): void;
+ /**
+ * Called before the chart is being destroyed.
+ * @param {Chart} chart - The chart instance.
+ * @param {object} args - The call arguments.
+ * @param {object} options - The plugin options.
+ */
+ beforeDestroy?(chart: Chart, args: EmptyObject, options: O): void;
/**
* Called after the chart has been destroyed.
* @param {Chart} chart - The chart instance.
* @param {object} args - The call arguments.
* @param {object} options - The plugin options.
+ * @deprecated since version 3.7.0 in favour of afterDestroy
*/
destroy?(chart: Chart, args: EmptyObject, options: O): void;
+ /**
+ * Called after the chart has been destroyed.
+ * @param {Chart} chart - The chart instance.
+ * @param {object} args - The call arguments.
+ * @param {object} options - The plugin options.
+ */
+ afterDestroy?(chart: Chart, args: EmptyObject, options: O): void;
/**
* Called after chart is destroyed on all plugins that were installed for that chart. This hook is also invoked for disabled plugins (options === false).
* @param {Chart} chart - The chart instance.