@@ -131,30 +131,35 @@ function parseTabBar(vnode: VNode, tab: string, listeners: EventListeners): VNod
131131 if ( vnode . children ) {
132132 for ( const child of vnode . children ) {
133133 if ( child . tag && child . tag === 'ion-tab-button' ) {
134- if ( ! child . data || ! child . data . on || ! child . data . on . click ) {
135- Object . assign ( child . data , {
136- on : {
137- click : ( e : Event ) => {
138- const path = ( child . elm as HTMLIonTabButtonElement ) . tab || '/' ;
139- const route = hasDataAttr ( child , 'to' ) ? child . data ! . attrs ! . to : { path } ;
140- e . preventDefault ( ) ;
141-
142- if ( Array . isArray ( IonTabsWillChange ) ) {
143- IonTabsWillChange . map ( item => item ( route ) ) ;
144- } else if ( IonTabsWillChange ) {
145- IonTabsWillChange ( route ) ;
146- }
147-
148- vnode . context ! . $router . push ( route , ( ) => {
149- if ( Array . isArray ( IonTabsDidChange ) ) {
150- IonTabsDidChange . map ( item => item ( route ) ) ;
151- } else if ( IonTabsDidChange ) {
152- IonTabsDidChange ( route ) ;
153- }
154- } ) ;
155- }
134+ const clickHandler = ( e : Event ) => {
135+ const path = ( child . elm as HTMLIonTabButtonElement ) . tab || '/' ;
136+ const route = hasDataAttr ( child , 'to' ) ? child . data ! . attrs ! . to : { path } ;
137+ e . preventDefault ( ) ;
138+
139+ if ( Array . isArray ( IonTabsWillChange ) ) {
140+ IonTabsWillChange . map ( item => item ( route ) ) ;
141+ } else if ( IonTabsWillChange ) {
142+ IonTabsWillChange ( route ) ;
143+ }
144+
145+ vnode . context ! . $router . push ( route , ( ) => {
146+ if ( Array . isArray ( IonTabsDidChange ) ) {
147+ IonTabsDidChange . map ( item => item ( route ) ) ;
148+ } else if ( IonTabsDidChange ) {
149+ IonTabsDidChange ( route ) ;
156150 }
157151 } ) ;
152+ } ;
153+
154+ if ( ! child . data || ! child . data . on || ! child . data . on . click ) {
155+ Object . assign ( child . data , { on : { click : clickHandler } } ) ;
156+ } else if ( child . data . on . click ) {
157+ // Always push our click handler to end of array
158+ if ( Array . isArray ( child . data . on . click ) ) {
159+ child . data . on . click . push ( clickHandler ) ;
160+ } else {
161+ child . data . on . click = [ child . data . on . click as Function , clickHandler ] ;
162+ }
158163 }
159164 }
160165 }
0 commit comments