diff --git a/src/component/legend/LegendModel.ts b/src/component/legend/LegendModel.ts index 70a6fd59ff..e77310cfdb 100644 --- a/src/component/legend/LegendModel.ts +++ b/src/component/legend/LegendModel.ts @@ -236,6 +236,7 @@ export interface LegendOption extends ComponentOption, LegendStyleOption, */ tooltip?: CommonTooltipOption + triggerEvent?: boolean } class LegendModel extends ComponentModel { @@ -530,7 +531,9 @@ class LegendModel extends ComponentMode tooltip: { show: false - } + }, + + triggerEvent: false }; } diff --git a/src/component/legend/LegendView.ts b/src/component/legend/LegendView.ts index 9016468240..4712716c66 100644 --- a/src/component/legend/LegendView.ts +++ b/src/component/legend/LegendView.ts @@ -51,6 +51,7 @@ import {createSymbol, ECSymbol} from '../../util/symbol'; import SeriesModel from '../../model/Series'; import { createOrUpdatePatternFromDecal } from '../../util/decal'; import { getECData } from '../../util/innerStore'; +import Element from 'zrender/src/Element'; const curry = zrUtil.curry; const each = zrUtil.each; @@ -177,6 +178,7 @@ class LegendView extends ComponentView { const contentGroup = this.getContentGroup(); const legendDrawnMap = zrUtil.createHashMap(); const selectMode = legendModel.get('selectedMode'); + const triggerEvent = legendModel.get('triggerEvent'); const excludeSeriesId: string[] = []; ecModel.eachRawSeries(function (seriesModel) { @@ -234,6 +236,11 @@ class LegendView extends ComponentView { ecData.ssrType = 'legend'; }); } + itemGroup.eachChild(child => { + if (triggerEvent) { + this.packEventData(child, legendModel, seriesModel, dataIndex, name); + } + }); legendDrawnMap.set(name, true); } @@ -287,7 +294,11 @@ class LegendView extends ComponentView { ecData.ssrType = 'legend'; }); } - + itemGroup.eachChild(child => { + if (triggerEvent) { + this.packEventData(child, legendModel, seriesModel, dataIndex, name); + } + }); legendDrawnMap.set(name, true); } @@ -307,7 +318,22 @@ class LegendView extends ComponentView { this._createSelector(selector, legendModel, api, orient, selectorPosition); } } - + private packEventData( + el: Element, + legendModel: LegendModel, + seriesModel: SeriesModel, + dataIndex: number, + name: string + ) { + const eventData = { + componentType: 'legend', + componentIndex: legendModel.componentIndex, + dataIndex, + value: name, + seriesIndex: seriesModel.seriesIndex, + }; + getECData(el).eventData = eventData; + }; private _createSelector( selector: LegendSelectorButtonOption[], legendModel: LegendModel, diff --git a/test/legend-action.html b/test/legend-action.html index 90dda2e3f2..de35ce9403 100644 --- a/test/legend-action.html +++ b/test/legend-action.html @@ -28,6 +28,7 @@
+
+ +