我认为您请求了一个棘手的操作,因为这不是标准的做事方式。
通常,该按钮不会让用户意识到他们已经在该选项卡上。
我建立了一个演示项目并尝试了不同的内置事件,但最终tab-button 发出了click 事件,并且它在被解雇之前到达tabs 组件中的shouldChange 方法是同一个标签:
https://github.com/ionic-team/ionic/blob/master/core/src/components/tabs/tabs.tsx#L164
有效的方法是在tabs.page.html 中的标签按钮中添加一个点击事件:
<ion-tabs>
<ion-tab-bar slot="bottom">
{{ snip }}
<ion-tab-button tab="tab2" (click)="tabButtonClicked('tab2')">
<ion-icon name="apps"></ion-icon>
<ion-label>Tab Two</ion-label>
</ion-tab-button>
{{ snip }}
</ion-tab-bar>
</ion-tabs>
我认为通过使用该单击处理程序,您可以获取当前选项卡,并发送您自己的事件:
tabButtonClicked(tabNumber: string) {
if (tabNumber === this.selectTab) {
this.events.publish('tabs', tabNumber);
}
}
本指南展示了如何使用 Ionic Events 系统,它允许您将自定义事件传递给系统中的其他组件:
https://alligator.io/ionic/events/
因此,您可以使用它来发出自定义的“滚动到顶部”事件,并在选项卡内处理该事件。然后在该自定义事件处理程序中使用您原来的 .scrollToTop() 代码。
例如在要滚动的标签页中添加:
@ViewChild(IonContent, { static: false }) private content: IonContent;
constructor(public events: Events) {
}
ionViewWillEnter() {
this.events.subscribe('tabs', tabNumber => {
if (tabNumber === 'tab1') {
this.content.scrollToTop();
}
});
}
ionViewDidLeave() {
this.events.unsubscribe('tabs', () => {} );
}