@@ -28,7 +28,6 @@ import { register, TAG_NAME } from "./wc";
28
28
import type { PropType , InjectionKey } from "vue" ;
29
29
import type {
30
30
EChartsType ,
31
- EventTarget ,
32
31
Option ,
33
32
Theme ,
34
33
ThemeInjection ,
@@ -93,7 +92,8 @@ export default defineComponent({
93
92
const nonEventAttrs = computed ( ( ) => omitOn ( attrs ) ) ;
94
93
const nativeListeners : Record < string , unknown > = { } ;
95
94
96
- const listeners : Record < string , any > = { } ;
95
+ const listeners : Map < { event : string ; once ?: boolean ; zr ?: boolean } , any > =
96
+ new Map ( ) ;
97
97
98
98
// We are converting all `on<Event>` props and collect them into `listeners` so that
99
99
// we can bind them to the chart instance later.
@@ -102,28 +102,32 @@ export default defineComponent({
102
102
Object . keys ( attrs )
103
103
. filter ( key => isOn ( key ) )
104
104
. forEach ( key => {
105
- // onClick -> c + lick
106
- // onZr:click -> z + r:click
107
- let event = key . charAt ( 2 ) . toLowerCase ( ) + key . slice ( 3 ) ;
108
-
109
105
// Collect native DOM events
110
- if ( event . indexOf ( "native:" ) === 0 ) {
111
- // native:click -> onClick
112
- const nativeKey = `on${ event . charAt ( 7 ) . toUpperCase ( ) } ${ event . slice (
113
- 8
114
- ) } `;
106
+ if ( key . indexOf ( "Native:" ) === 2 ) {
107
+ // onNative:click -> onClick
108
+ const nativeKey = `on${ key . charAt ( 9 ) . toUpperCase ( ) } ${ key . slice ( 10 ) } ` ;
115
109
116
110
nativeListeners [ nativeKey ] = attrs [ key ] ;
117
111
return ;
118
112
}
119
113
120
- // clickOnce -> ~click
121
- // zr:clickOnce -> ~zr:click
114
+ // onClick -> c + lick
115
+ // onZr:click -> z + r:click
116
+ let event = key . charAt ( 2 ) . toLowerCase ( ) + key . slice ( 3 ) ;
117
+
118
+ let zr : boolean | undefined ;
119
+ if ( event . indexOf ( "zr:" ) === 0 ) {
120
+ zr = true ;
121
+ event = event . substring ( 3 ) ;
122
+ }
123
+
124
+ let once : boolean | undefined ;
122
125
if ( event . substring ( event . length - 4 ) === "Once" ) {
123
- event = `~${ event . substring ( 0 , event . length - 4 ) } ` ;
126
+ once = true ;
127
+ event = event . substring ( 0 , event . length - 4 ) ;
124
128
}
125
129
126
- listeners [ event ] = attrs [ key ] ;
130
+ listeners . set ( { event, zr , once } , attrs [ key ] ) ;
127
131
} ) ;
128
132
129
133
function init ( option ?: Option ) {
@@ -141,28 +145,14 @@ export default defineComponent({
141
145
instance . group = props . group ;
142
146
}
143
147
144
- Object . keys ( listeners ) . forEach ( key => {
145
- let handler = listeners [ key ] ;
146
-
148
+ listeners . forEach ( ( handler , { zr, once, event } ) => {
147
149
if ( ! handler ) {
148
150
return ;
149
151
}
150
152
151
- let event = key . toLowerCase ( ) ;
152
- if ( event . charAt ( 0 ) === "~" ) {
153
- event = event . substring ( 1 ) ;
154
- handler . __once__ = true ;
155
- }
156
-
157
- let target : EventTarget = instance ;
158
- if ( event . indexOf ( "zr:" ) === 0 ) {
159
- target = instance . getZr ( ) ;
160
- event = event . substring ( 3 ) ;
161
- }
162
-
163
- if ( handler . __once__ ) {
164
- delete handler . __once__ ;
153
+ const target = zr ? instance . getZr ( ) : instance ;
165
154
155
+ if ( once ) {
166
156
const raw = handler ;
167
157
168
158
handler = ( ...args : any [ ] ) => {
0 commit comments