Skip to content

Commit 55c0c88

Browse files
Merge core and user provided click handlers in ion-tab-button
1 parent 038d63a commit 55c0c88

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

src/components/navigation/IonTabs.ts

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)